3

リストボックスを含むフォームに UserControl があります。リストボックスの最初のアイテムを自動的に選択したいのですが (少なくとも 1 つのアイテムがあると仮定します)、次のコードが機能しません。

private void Lightnings_Mode_Load(object sender, EventArgs e)
        {
            this.Size = new Size(416, 506);
            this.Location = new Point(23, 258);
            listBoxIndexs();
            listBoxControl1.MyListBox.SelectedIndex = 0;
            if (this.listBoxControl1.MyListBox.Items.Count > 0)
                this.listBoxControl1.MyListBox.SelectedIndex = 0;
            listBoxControl1.MyListBox.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
            this.listBoxControl1.ItemRemoved += new EventHandler<ItemEventArgs>(listBoxControl1_ItemRemoved);
        }

この行: listBoxControl1.MyListBox.SelectedIndex = 0; 選択されているように、最初の ListBox 項目を青色でマークします。しかし、それは実際にはアイテムを選択することではありません!

だから私はこれを追加しようとしました:

if (this.listBoxControl1.MyListBox.Items.Count > 0)
                    this.listBoxControl1.MyListBox.SelectedIndex = 0;

しかし、それも機能していません。

これは SelectedIndex イベントです。

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            item = listBoxControl1.MyListBox.SelectedItem.ToString();
            this.f1.PlayLightnings();
            f1.pdftoolsmenu();
            int indx = listBoxControl1.MyListBox.SelectedIndex;
            if (listBoxControl1.Indices.Contains(indx))
            {
                if (item != null && !pdf1.Lightnings.Contains(item.ToString()))
                {
                    pdf1.Lightnings.Add(item.ToString());
                }
            }
        }

イベントの名前が正しくありません。UserControl 上の ListBox であるため、変更する必要がありますが、正しい名前です。

SelectedIndex イベントにブレークポイントを設定してアイテムをクリックすると、ブレークポイントで停止します。しかし、UserControl と ListBox を使用して新しいフォームを表示/開くと、自動的に selectedIndex イベントに移動したいと考えています。

そのため、SelectedIndex イベントにブレークポイントを設定すると、Form1 のボタンをクリックして新しいフォームを表示/開くと、最初の項目をクリックしたときのようにブレークポイントで自動的に停止します。

これは、新しいフォームを表示するコードの Form1 にあります。

if (toolStripComboBox2.SelectedIndex == -1 && toolStripComboBox1.SelectedIndex == -1)
            {
            }
            else
            {
                Lightnings_Extractor.Lightnings_Mode lightningsmode1 = new Lightnings_Extractor.Lightnings_Mode(this);
                lightningsmode1.Show();
            }

最初のアイテムを自動的に選択することを除いて、すべてが機能しています。

4

4 に答える 4

3

イベントのリッスンを開始する行と、実際にブロードキャストする行を入れ替える必要がある場合があります。

変更してみてください:

if (this.listBoxControl1.MyListBox.Items.Count > 0)
    this.listBoxControl1.MyListBox.SelectedIndex = 0;
listBoxControl1.MyListBox.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);

これに:

listBoxControl1.MyListBox.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
if (this.listBoxControl1.MyListBox.Items.Count > 0)
    this.listBoxControl1.MyListBox.SelectedIndex = 0;

通常、フォームの OnLoad セクションで EventHandlers をサブスクライブし、OnShow セクションの設定を調整して、この種のことを回避します。

于 2013-01-12T16:45:41.753 に答える
2

アイテム自体のプロパティを変更する必要があります。

listBoxControl1.Focus();
listBoxControl1.Items[0].Selected = true;

最初の行は実際には必要ありませんが、いくつかの問題を防ぐために含めます。IndexOutOfRangeExceptionリストボックスに項目がない場合にも対処する必要があります。

于 2013-01-12T16:36:20.950 に答える
1

http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.setselected(v=vs.90).aspx

それ以外の

if (this.listBoxControl1.MyListBox.Items.Count > 0)
                    this.listBoxControl1.MyListBox.SelectedIndex = 0;

これを試して:

if (this.listBoxControl1.MyListBox.Items.Count > 0)
                    this.listBoxControl1.MyListBox.SetSelected(0,true);
于 2013-01-12T16:35:46.710 に答える
0

これを簡単に試すことができます: 0 インデックスを使用します。

listBoxControl1.Items[0].Selected = true;
于 2013-01-12T16:36:52.337 に答える