リストボックスで選択されていないアイテムをクリックすると、選択されます。クライアントは、もう一度クリックすると(cntrlキーを使用せずに)選択を解除することを望んでいます。
しかし、私は多くのことを試みましたが、何も機能しません。それで、これは可能であり、可能であれば、誰かがC#コードを使用してどのように私に説明することができますか?
組み込みのオプションでこれを行う簡単な方法はありません。私の解決策は、マウスがコントロール上にあるときに仮想Ctrlキーをプログラムで送信することです(したがって、ユーザーは何かを押したり考えたりする必要はありません)。追加機能が必要ない場合は、(MSDNMultiExtended
)を使用してみてください。MultiSimple
もしそうなら、これが醜い解決策です:
[DllImport("user32.dll", SetLastError = true)]
static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);
public const byte KEYEVENTF_KEYUP = 0x02;
public const int VK_CONTROL = 0x11;
private void listBox1_MouseEnter(object sender, EventArgs e)
{
keybd_event(VK_CONTROL, (byte)0, 0, 0);
}
private void listBox1_MouseLeave(object sender, EventArgs e)
{
keybd_event(VK_CONTROL, (byte)0, KEYEVENTF_KEYUP, 0);
}
ここでの私の答えから。
選択されたインデックスイベントに何かを追加して、選択されたインデックスが貴重に選択されたものと同じである場合(どこかに保存しておく)、選択されたインデックスを-1に設定して、何も選択されないようにすることができます。
イベントに準拠し、SelectedValueChanged
これを追加します。
string selected = null;
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
ListBox lb = sender as ListBox;
if (lb == null) { return; }
if (lb.SelectedItem != null && lb.SelectedItem.ToString() == selected)
{
selected = lb.SelectedItem.ToString();
lb.SetSelected(lb.SelectedIndex, false);
}
else
{
selected = lb.SelectedItem == null ? null : lb.SelectedItem.ToString();
}
}
これにより、リストボックスの空白をクリックしたときに、すべて/特定のリストボックスアイテムの選択が解除されます。
private void listBox1_MouseClick(object sender, MouseEventArgs e)
{
int totalHeight = listBox1.ItemHeight * listBox1.Items.Count;
if(e.Y < totalHeight && e.Y >= 0)
{
// Item is Selected which user clicked.
if(listBox1.SelectedIndex == 0 && listBox1.SelectedItem != null) // Check if Selected Item is NOT NULL.
{
MessageBox.Show("Selected Index : " + listBox1.SelectedItem.ToString().Trim());
}
else
{
listBox1.SelectedIndex = -1;
MessageBox.Show("Selected Index : No Items Found");
}
}
else
{
// All items are Unselected.
listBox1.SelectedIndex = -1;
MessageBox.Show("Selected Index : " + listBox1.SelectedItem); // Do NOT use 'listBox1.SelectedItem.ToString().Trim()' here.
}
}
また、アイテムが選択されている/選択されていないときに実行したいことでコードを変更することもできます。