10

列挙型の項目を表示するリストボックスがあります。リストボックスが表示されたとき/フォームが開いたときに、現在の値(データベースから読み取ったもの)を選択/強調表示したい。ただし、このコードは次のとおりです。

lblSelectedPrinter.Text = AppSettings.ReadSettingsVal("beltprinter");
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(lblSelectedPrinter.Text);

...動作しません。ここで「GetItemAt」を使用する例を見ました (プログラムで ListBox 内の項目/インデックスを選択する) が、C# の簡略化された古風なバージョン (.NET 1.1、C# 2) にはそのような生き物はありません。

アップデート

私はこれがうまくいくと思った:

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedItem = currentPrinterIndex;

...しかし、そうではありません (現在のプリンターがラベルに表示されますが、リストボックス内の対応するエントリ/値は選択されていません)。

4

8 に答える 8

4

これは機能します:

listBoxBeltPrinters.SetSelected(listBoxBeltPrinters.FindString("beltprinter"), true);
于 2015-08-16T01:25:35.187 に答える
2
int i = AppSettings.ReadSettingsVal("beltprinter"); //Save it as an int.
listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(i);
lblSelectedPrinter.Text = listBoxBeltPrinters.SelectedItem.toString();
于 2013-08-02T16:57:05.553 に答える
2

次のことを試すことができますか?コードから取得し、FindString を使用します

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int index = listBoxBeltPrinters.FindString(lblSelectedPrinter.Text);
listBoxBeltPrinters.SelectedIndex = index;
于 2013-08-02T18:39:38.353 に答える
2

これは機能します:

string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
lblSelectedPrinter.Text = currentPrinter;
int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
listBoxBeltPrinters.SelectedIndex = currentPrinterIndex;

これは、設定値の表示、読み取り、および書き込みに必要な唯一のコードです。

private void PrinterPickerForm_Load(object sender, System.EventArgs e)
{
    Type type = typeof(PrintUtils.BeltPrinterType);
    foreach (FieldInfo field in type.GetFields(BindingFlags.Static | BindingFlags.Public))
    {
        string display = field.GetValue(null).ToString();
        listBoxBeltPrinters.Items.Add(display);
    }
    string currentPrinter = AppSettings.ReadSettingsVal("beltprinter");
    lblCurrentPrinter.Text = currentPrinter;
    int currentPrinterIndex = listBoxBeltPrinters.Items.IndexOf(currentPrinter);
    listBoxBeltPrinters.SelectedIndex = currentPrinterIndex;
}

private void btnSaveSelectedVal_Click(object sender, System.EventArgs e)
{
    string sel = listBoxBeltPrinters.SelectedItem.ToString();
    if (sel != lblCurrentPrinter.Text)
    {
        AppSettings.WriteSettingsVal("beltPrinter", sel);
    }
}
于 2013-08-02T17:52:38.883 に答える
2

整数である必要があります。int.Parse to Convert を使用して、文字列から int にキャストできます。

listBoxBeltPrinters.SelectedItem = listBoxBeltPrinters.Items.IndexOf(int.Parse(System.Configuration.ConfigurationSettings.AppSettings.Get("beltprinter")));
lblSelectedPrinter.Text = listBoxBeltPrinters.SelectedItem.toString();
于 2013-08-02T17:00:06.623 に答える
2

listBoxObject.SetSelected()との組み合わせはlistBoxObject.FindString()エレガントなソリューションです。それは私にとってもうまくいきます。

于 2018-01-09T14:24:25.353 に答える