質問編集履歴

2

詳しいソースの追加

2019/05/27 17:25

投稿

kemomimi_sabal
kemomimi_sabal

スコア12

test CHANGED
File without changes
test CHANGED
@@ -16,14 +16,80 @@
16
16
 
17
17
  ```C#
18
18
 
19
- private void NoteEdit_Scroll(object sender, ScrollEventArgs e)
19
+ private void KeyBoard_Paint(object sender, PaintEventArgs e)
20
20
 
21
21
  {
22
22
 
23
+ int octave_draw_size_y = PianoRoll.white_key_board_height_list.Sum();
24
+
25
+ int measure_off_no, measure_count = 1;
26
+
27
+ int new_measure_count = 1;
28
+
29
+ int offset, measure_x_draw;
30
+
31
+ measure_x_draw = measure_count * PianoRoll.MEASURE_WIDTH;
32
+
23
- pictureBox1.Update();
33
+ measure_off_no = 0;
34
+
35
+ offset = measure_off_no * PianoRoll.MEASURE_WIDTH;
36
+
37
+ new_measure_count += measure_count;
38
+
39
+ // 白鍵と黒鍵の描画
40
+
41
+ SolidBrush white_keyboard_color = new SolidBrush(Color.FromArgb(255, 255, 255));
42
+
43
+ Pen black_line_color = new Pen(Color.FromArgb(0, 0, 0), 1);
44
+
45
+ black_line_color.Alignment = System.Drawing.Drawing2D.PenAlignment.Inset;
46
+
47
+ SolidBrush black_keyboard_color = new SolidBrush(Color.FromArgb(10, 10, 10));
48
+
49
+ // 白鍵の描画
50
+
51
+ int white_start_y = 0;
52
+
53
+ for (int i = 0; i < PianoRoll.octave_num; i++)
54
+
55
+ {
56
+
57
+ foreach (int height in PianoRoll.white_key_board_height_list)
58
+
59
+ {
60
+
61
+ e.Graphics.FillRectangle(white_keyboard_color, 0, white_start_y, PianoRoll.WHITE_KEYBOARD_WIDTH, height);
62
+
63
+ e.Graphics.DrawRectangle(black_line_color, 0, white_start_y, PianoRoll.WHITE_KEYBOARD_WIDTH, height);
64
+
65
+ white_start_y += height;
66
+
67
+ }
68
+
69
+ }
70
+
71
+ // 黒鍵の描画
72
+
73
+ for (int i = 0; i < PianoRoll.octave_num; i++)
74
+
75
+ {
76
+
77
+ foreach (int black_key_board_start_y in PianoRoll.black_key_board_start_y_list)
78
+
79
+ {
80
+
81
+ 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);
82
+
83
+ }
84
+
85
+
86
+
87
+ }
24
88
 
25
89
  }
26
90
 
27
91
  ```
28
92
 
29
93
  4時間ほど悩みましたが解決に至りません。どうしたらいいのでしょうか
94
+
95
+ ![スクロールした時に再描画して一番下まで見れるようにしたい。横は時間が追加されてある数を超えたら再描画](d152cbafc8041e76add7d1f014b863d9.png)

1

全体的な質問内容の変更

2019/05/27 17:25

投稿

kemomimi_sabal
kemomimi_sabal

スコア12

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