実現したいこと
表のようなものを作成し、
SplitContenerの左側に項目名、右側にクリックでバーなどを追加できるものを
作ろうとしています。
DataGirdの見た目は少々気に入らないけれど、他に良い方法が思いつきませんでした。
Labelで罫線を作成し、スクロールバーを連動させて動かせば
自分が欲しいものを作れるかと思ってます。
Labelで作ったグリッドにあわせてスナップする機能も付けたいなと思ってますし、
やりたい事はたくさんあります。
いま出来なくて困っている事
動的生成したラベルをLabelListの配列に入れています。
splitContainerをクリックした時にピンク色のラベルを自動生成しています。
それにハマるようにHeightを合わせたりしているのですが、
クリックを数回していると、ラベルの位置がズレます。
Console.WriteLineは、50で割り切れる正しそうな数値がでるのですが、
なぜかラベルの描画が罫線にぴったりでなくズレます。
xやyなどの座標は、intで宣言しています。
splitContainer1にはスクロールバーが表示されており、
そのせいかもしれないと気づきました。
splitContainerにはAutoScrollをTrueにしているため、
Locationの値が見ている範囲だけという判断になっている可能性はあります。
でも、どのように対応したらいいのかが思いつきません。
最終的にはSplitContainerの左側と連動してスクロールさせたりしたいとも思っています。
発生している問題・エラーメッセージ
不要な部分は白塗りしました。
少しだけスクロールしてからクリックしたら、位置が罫線からズレました。
やりたい事
見えている位置のクリック座標ではなく、
SplitContainerの左上を基準としたクリック座標が知りたい
該当のソースコード
C#
1 List<Label> LabelList = new List<Label>(); 2 private void createCustomLabel(string MyText,int x,int y , int width ,int height) 3 { 4 Label MyLabel = new Label(); 5 LabelList.Add(MyLabel); 6 MyLabel.BackColor = System.Drawing.Color.MistyRose; 7 MyLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 8 MyLabel.Location = new System.Drawing.Point(x, y); 9 MyLabel.Name = "myLabel"; 10 MyLabel.Size = new System.Drawing.Size(width,height); 11 MyLabel.TabIndex = 0; 12 MyLabel.Text = MyText; 13 MyLabel.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; 14 splitContainer1.Panel2.Controls.Add(MyLabel); 15 } 16 17 private void splitContainer1_Panel2_MouseDown(object sender, MouseEventArgs e) 18 { 19 before_x = e.X; 20 int a = e.Y / 50; 21 a = a * 50; 22 now_y = a; 23 createCustomLabel("テスト", before_x, now_y, 60, 50); 24 view = true; 25 }
試したこと
スクロールバーを動かす範囲を50ずつ変更するということが出来れば
対応可能かもしれないと思いましたが、現在調査中です。
AutoScrollPositionでも監視は出来なさそうです…。
補足情報(FW/ツールのバージョンなど)
.NET Framework 4.7.2

回答2件
あなたの回答
tips
プレビュー