これがコードです。Form1 Load イベント:
private void Form1_Load(object sender, EventArgs e)
{
if (listBox1.Items != null && listBox1.Items.Count > 0)
{
listBox1.Select();
label4.Text = listBox1.SelectedItem.ToString();
string startTag = "Url: ";
string endTag = " ---";
int startTagWidth = startTag.Length;
int endTagWidth = endTag.Length;
int index = 0;
index = label4.Text.IndexOf(startTag, index);
int start = index + startTagWidth;
index = label4.Text.IndexOf(endTag, start + 1);
string g = label4.Text.Substring(start, index - start);
label4.Text = g;
mainUrl = g;
listboxContextMenu = new ContextMenuStrip();
listboxContextMenu.Opening += new CancelEventHandler(listboxContextMenu_Opening);
}
}
次に、listBox の mouseDown イベント:
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
int index = listBox1.IndexFromPoint(e.Location);
{
if (index == listBox1.SelectedIndex)
{
listboxContextMenu.Show();
}
}
}
}
続いてオープニングイベント。
private void listboxContextMenu_Opening(object sender, CancelEventArgs e)
{
//clear the menu and add custom items
listboxContextMenu.Items.Clear();
listboxContextMenu.Items.Add(string.Format("Edit - {0}", listBox1.SelectedItem.ToString()));
}
それが何をするかというと、マウスの右ボタンで listBox の特定の項目をクリックすると、contextMenu が表示されます。
問題は、フォームではなく画面の左上隅にある画面の左上隅に contextMenu が常に表示されることです。
2 つ目の問題は、選択した項目を 2 回目にクリックしたときにのみ、コンテキスト メニューが表示されることです。プログラムを実行しているとき、listBox の最初の項目は既に選択されていますが、その項目を 2 回クリックしたときにのみコンテキスト メニューが表示されます。その後、毎回1回クリックしますが、最初にプログラムを実行するときに、右ボタンのクリックを2回クリックする必要があります。
これら2つの問題を解決するにはどうすればよいですか?