【質問】
・2回目以降のチェックからフォームが二回表示されるようになっているため、一度だけ表示したい。
・チェックリストボックスのチェックが複数チェックできてしまうので、1つだけチェックできるようにしたい。
【実装する目的】
・検索をした際に、検索した値が複数もしくは単一でチェックリストボックスに表示されるため、チェックボックスを一つだけ選択できるようにし(複数チェック不可)、チェックボックスをクリックすると違うフォームを表示するようにしたい。
※チェックしたときにフォームが二回表示されることがあるためチェックボックスの方から検証
【仮説】
・チェックが二回扱いになっている?
・チェックの動作から確認
【流れ】
テキストボックスに入力し、検索ボタンを押すと、チェックリストボックスに表示され、チェックすると別のフォームを表示
【相談前実装】
参考記事を参照し、実装しました。
キータの記事を参考に試しに動かしてみるとクリック回数を重ねるにつれてフリーズする。ため1行コメントアウトして実装
マイクロソフトの記事を参考にしましたが、どこのファイルに何を記述すればいいのかがわからなかったため、実装中止。
チェックは一つになりましたが、二回目以降のチェック後、フォームが出現し、閉じると、また同じフォームが出現
■Form1.cs[デザイン]
checkedListBox1のプロパティ変更
CheckedOnClick: true
SelectionMode: One
Tab index:1
ThreeDCheckBoxes: true
■Form1.cs
c#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.IO; 10using System.Windows.Forms; 11 12namespace csvreadtest 13{ 14 15 public partial class Form1 : Form 16 { 17 public Form1() 18 { 19 InitializeComponent(); 20 } 21 private void Form1_Load(object sender, EventArgs e) 22 { 23 checkedListBox1.Items.Add("りんご"); 24 checkedListBox1.Items.Add("おれんじ"); 25 checkedListBox1.Items.Add("みかん"); 26 checkedListBox1.Items.Add("もも"); 27 checkedListBox1.Items.Add("すいか"); 28 checkedListBox1.Items.Add("ぎんなん"); 29 } 30 31 //クリックが二回判定? 32 int lastCheckedIndex = -1; 33 private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 34 { 35 if (e.Index != lastCheckedIndex) 36 { 37 if (lastCheckedIndex != -1) 38 checkedListBox1.SetItemCheckState(lastCheckedIndex, CheckState.Unchecked); 39 lastCheckedIndex = e.Index; 40 } 41 //フォーム2を表示 42 Form2 form2 = new Form2(); 43 form2.ShowDialog(); 44 } 45 //To register event 46 //checkedListBox1.ItemCheck += checkedListBox1_ItemCheck; //エラーのためコメントアウト 47 48 49 } 50}
■Form2.cs
c#
1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace csvreadtest 12{ 13 public partial class Form2 : Form 14 { 15 public Form2() 16 { 17 InitializeComponent(); 18 } 19 20 private void button1_Click(object sender, EventArgs e) 21 { 22 this.Close(); 23 } 24 25 private void button2_Click(object sender, EventArgs e) 26 { 27 this.Close(); 28 } 29 } 30}
【使用環境】
C# visual studio2022 .net framework windowsForm
【参考記事】
QIITA
https://qiita.com/noixip/items/3d1bd016b4cecfb48d2e
※実装しましたが、チェックをしすぎるとフリーズする。
microsoft
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.checkedlistbox.checkonclick?view=windowsdesktop-6.0
プログラミング初心者です。
プログラマーの先輩方にご教授いただければ幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー