-1

コンストラクターで私はしました:

if (listBox1.Items != null)
            {
                listBox1.Focus();
            }

しかし、プログラムを実行しているときは、フォーム内の別の場所にあるボタンにフォーカスがあるため、listBoxでキーボードを上に移動することはできません。フォーカスを取得するには、listBoxをマウスでクリックする必要があります。

もう1つの問題は、ユーザーがリストボックスに新しいアイテムを追加すると、最後に追加されたアイテムに自動的にフォーカスが移ることです。この問題の場合、これはリストボックスに新しいアイテムを追加するコードです。

private void KeysValuesUpdate()
        {
            using (var w = new StreamWriter(keywords_path_file))
            {
                crawlLocaly1 = new CrawlLocaly();
                crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
                DialogResult dr = crawlLocaly1.ShowDialog(this);
                if (dr == DialogResult.OK)
                {
                    if (LocalyKeyWords.ContainsKey(mainUrl))
                    {
                        LocalyKeyWords[mainUrl].Clear();
                        LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
                    }
                    else
                    {
                        LocalyKeyWords[mainUrl] = new List<string>();
                        LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());
                    }
                    Write(w);
                    ClearListBox();
                }
                if (dr == DialogResult.Cancel)
                {
                    Write(w);
                }
            }
        }

        private void ClearListBox()
        {
            data.Clear();
            listBox1.DataSource = null;
            string sb;
            foreach (KeyValuePair<string, List<string>> kvp in LocalyKeyWords)
            {
                for (int i = 0; i < kvp.Value.Count(); i++)
                {
                    sb = "Url: " + kvp.Key + " --- " + "Local KeyWord: " + kvp.Value[i] + Environment.NewLine;
                    data.Add(sb.ToString());
                }
            }
            listBox1.DataSource = data;
        }

問題は、listBoxアイテムのどのケースでもフォーカスを設定できないのはなぜですか?

コンストラクターの最初のケースでは、フォーカスをリストの最後のアイテムに配置し、新しいアイテムを追加するたびに、最後に追加されたアイテムにフォーカスを配置します。

4

2 に答える 2

1

ほとんどの場合、アイテム選択されていますが、別のコントロールにフォーカスがあるため、わかりません。アプリケーションの設計に応じて、これを解決する方法はいくつかあります。

  1. 質問の最初の部分では、コンストラクターレベルでコントロールが初期化プロセス中であるため、 Page /FormLoadイベントでFocusを設定する必要があります。ListViewフォームが表示されるたびに、フォーカスを最初に設定します。ユーザーは通常、コントロールをクリックしてフォーカスを設定します。ただし、プログラムでフォーカスを取得するコントロールを指定することもできます。これを行う1つの方法は、コントロールのタブインデックスを0に設定することです(最小値は、最初のフォーカスを持つコントロールを示します)。2番目の可能性は、フォームのイベントで、またはプロパティLoadを設定した直後に次のコード行を使用することです。Selected

    listBox1.Select();
    

    このソリューションの問題は、ユーザーがフォーム上の別のコントロール(テキストボックスやボタンなど)にフォーカスを設定したときに、選択したアイテムが強調表示されなくなることです。

  2. 質問の2番目の部分である、リストボックスで最後に追加された項目を選択するには、次のコードを使用します。

    listBox1.SelectedIndex = listBox1.Items.Count - 1;
    listBox1.SetFocus();
    
于 2012-10-18T17:44:32.977 に答える
0

あなたのClearListBoxメソッドは実際にはUpdateListBoxメソッドのようです。

listBox1.DataSource = data; 

listBox1.SelectedIndex = <index of newitem>;
// or
listBox1.SelectedItem = "text of new item";

listBox1.SetFocus();

新しいアイテムが最後のアイテムである場合、そのインデックスはlistBox1.Items.Count - 1です。

于 2012-10-18T17:45:42.397 に答える