質問編集履歴

2

詳しいソースの追加

2019/05/27 17:25

投稿

kemomimi_sabal
kemomimi_sabal

スコア12

title CHANGED
File without changes
body CHANGED
@@ -7,9 +7,42 @@
7
7
  下記がコードです
8
8
 
9
9
  ```C#
10
- private void NoteEdit_Scroll(object sender, ScrollEventArgs e)
10
+ private void KeyBoard_Paint(object sender, PaintEventArgs e)
11
11
  {
12
+ int octave_draw_size_y = PianoRoll.white_key_board_height_list.Sum();
13
+ int measure_off_no, measure_count = 1;
14
+ int new_measure_count = 1;
15
+ int offset, measure_x_draw;
16
+ measure_x_draw = measure_count * PianoRoll.MEASURE_WIDTH;
12
- pictureBox1.Update();
17
+ measure_off_no = 0;
18
+ offset = measure_off_no * PianoRoll.MEASURE_WIDTH;
19
+ new_measure_count += measure_count;
20
+ // 白鍵と黒鍵の描画
21
+ SolidBrush white_keyboard_color = new SolidBrush(Color.FromArgb(255, 255, 255));
22
+ Pen black_line_color = new Pen(Color.FromArgb(0, 0, 0), 1);
23
+ black_line_color.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
24
+ SolidBrush black_keyboard_color = new SolidBrush(Color.FromArgb(10, 10, 10));
25
+ // 白鍵の描画
26
+ int white_start_y = 0;
27
+ for (int i = 0; i < PianoRoll.octave_num; i++)
28
+ {
29
+ foreach (int height in PianoRoll.white_key_board_height_list)
30
+ {
31
+ e.Graphics.FillRectangle(white_keyboard_color, 0, white_start_y, PianoRoll.WHITE_KEYBOARD_WIDTH, height);
32
+ e.Graphics.DrawRectangle(black_line_color, 0, white_start_y, PianoRoll.WHITE_KEYBOARD_WIDTH, height);
33
+ white_start_y += height;
34
+ }
35
+ }
36
+ // 黒鍵の描画
37
+ for (int i = 0; i < PianoRoll.octave_num; i++)
38
+ {
39
+ foreach (int black_key_board_start_y in PianoRoll.black_key_board_start_y_list)
40
+ {
41
+ e.Graphics.FillRectangle(black_keyboard_color, 0, black_key_board_start_y + (octave_draw_size_y * i), PianoRoll.BLACK_KEYBOARD_WIDTH, PianoRoll.BLACK_KEYBOARD_HEIGHT);
42
+ }
43
+
44
+ }
13
45
  }
14
46
  ```
15
- 4時間ほど悩みましたが解決に至りません。どうしたらいいのでしょうか
47
+ 4時間ほど悩みましたが解決に至りません。どうしたらいいのでしょうか
48
+ ![スクロールした時に再描画して一番下まで見れるようにしたい。横は時間が追加されてある数を超えたら再描画](d152cbafc8041e76add7d1f014b863d9.png)

1

全体的な質問内容の変更

2019/05/27 17:25

投稿

kemomimi_sabal
kemomimi_sabal

スコア12

title CHANGED
File without changes
body CHANGED
@@ -1,14 +1,15 @@
1
1
  こんにちは。
2
2
 
3
- C#で横スクロールバーを動かしたときGraphics更新されるようにしたいのですが、
3
+ パネルをスクロールした描画の続きの部分描画されるようにしたいのですが、現状では続きの部分が描画されず、途切れてしまいます
4
4
 
5
+ Panelの上にPictureBoxを置いてスクロールバーを表示させることには成功しましたが、やはりスクロールした時に途切れ、再描画がされません。
6
+
7
+ 下記がコードです
8
+
5
9
  ```C#
6
- private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
10
+ private void NoteEdit_Scroll(object sender, ScrollEventArgs e)
7
11
  {
8
- this.NoteEdit.Invalidate();
12
+ pictureBox1.Update();
9
- Console.WriteLine("水平方向に{0}スクロールされました", e.NewValue - e.OldValue);
10
13
  }
11
- }
12
- }
13
14
  ```
14
- 上記のコードでスクロールした時にGraphicsちらついてしいます。どか解決策を教えてただけますでしょうか
15
+ 4時間ほど悩みましたが解決に至りせん。どうしいのでしょうか