私は通常、物事を把握していますが、これは私を打ち負かすものです。C#選択された値を使用したリストボックス
私はフォームと送信ボタンのリストボックスの配列を持っています。ユーザーは任意のリストボックスからアイテムを選択し、サブミットボタンをクリックしてアイテムを確定することができますが、リストボックス1から何かを選択してリストボックス2から何かを選択すると、リストボックスで選択されたアイテム1は選択されなくなるはずです。
これをイベントハンドラにコーディングすることはできますが、別のリストボックスの値を変更すると、プログラムによって別のイベントが発生します。私はそれから論理を出すことができない。
私はちょうど複数の送信ボタンを置く必要があると思います。
EDIT:
私は最終的には非常に明白かつ簡単な解決策と思われるものを考え出しました。ユーザーまたはプログラムが変更を行っているかどうかを区別するために、フォーカスされたプロパティを使用しました。マウスとキーボードの両方の選択に対応しています。提案のため
おかげで...私のイベントハンドラがフラグをチェックし、行動を取ることができないので、
for (int i = 0; i < treatments.Length; i = i + 1)
{
this.Controls.Add(ListBoxes[i]);
this.Controls.Add(Labels[i]);
this.Controls.Add(Spinners[i]);
Labels[i].Top = vPosition - 20;
Labels[i].Left = hPosition;
Labels[i].Width = 600;
ListBoxes[i].Left = hPosition;
ListBoxes[i].Top = vPosition;
ListBoxes[i].Width = 600;
Spinners[i].Top = vPosition + ListBoxes[i].Height;
Spinners[i].Left = hPosition + ListBoxes[i].Width - 60;
Spinners[i].Width = 40;
for (int d = 25; d > 0; d = d - 1) { Spinners[i].Items.Add((d).ToString()); }
Spinners[i].SelectedIndex = 24;
//EVENT HANDLER CODE that is executed if any selectetindexchange in any LIstbox in array
ListBoxes[i].SelectedIndexChanged += (sender, e) =>
{
for (int s = 0; s < i; s = s + 1)
{
//FIND WHICH LBs[s] IS THE SENDING LISTBOX
if (ListBoxes[s] == sender && ListBoxes[s].Focused == true)
{
string msg = "sender is ListBox " + s.ToString() + "\nFocus is" + ListBoxes[s].Focused.ToString();
// MessageBox.Show(msg);
}
else if(ListBoxes[s].Focused==false)
{
ListBoxes[s].SelectedIndex = -1;
}
}
}; //end of event handler
}
はWinformsの、WebフォームまたはMVCプロジェクトですか? – hardkoded
いつでもフラグを使用できます。 –
この質問は似ており、答えは一般的な戦略まで適用されるかもしれません:[C#でイベントをトリガーせずにコンボボックスSelectedIndexを変更する](https://stackoverflow.com/questions/3356518/modifying-combobox-selectedindex-without-トリガーイベントをCシャープにする) – hatchet