0

私はこの主題に関する多くのトピックを読みました。いろいろ試してみたのですが、なぜかうまくいきません。問題は次のとおりです。Excel ワークブックのシート名が取り込まれたコンボボックスがあります。(問題がある場合に備えて、そのコードを含めます) 選択したテキスト値を取得しようとしても、何も得られません。私は何を間違っていますか?

    /********************************************************************************
     * The following code takes in an excel filename and populates a combobox based 
     * on the excel tab names.
     ********************************************************************************/
    private void GetExcelSheetNames(string excelFile)
    {
        _Application xlApp;
        Workbook xlTemplateWB;

        xlApp = new ApplicationClass();

        xlTemplateWB = xlApp.Workbooks.Open(Elmnt.getDBPath() + TEMPLATENAME, 0, true,
            5, "", "", false, XlPlatform.xlWindows, "", true, false, 0, true, false, false);

        foreach (Worksheet temp in xlTemplateWB.Worksheets)
        {
            cboBenchSheets.Items.Add(temp.Name);
        }

        xlTemplateWB.Close(true, Missing.Value, Missing.Value);
        xlApp.Quit();
    }

    /********************************************************************************
     * This returns the selected item in the cboBenchSheets combo box
     ********************************************************************************/
    public String getSelection()
    {
        String selected;
        selected = cboBenchSheets.Text;                                         //Returns nothing
        selected = cboBenchSheets.SelectedText;                                 //Returns nothing
        selected = cboBenchSheets.SelectedValue.ToString();                     //Returns nothing
        selected = cboBenchSheets.GetItemText(cboBenchSheets.SelectedIndex);    //Returns -1

        return selected;
    }
4

2 に答える 2

2

ComboBox のドキュメントのこのセクションが役立つと思います。

SelectedText プロパティを使用して、ComboBox コントロールで現在選択されているテキストを取得または変更できます。ただし、ユーザーの操作によって選択が自動的に変更される可能性があることに注意してください。たとえば、ボタンの Click イベント ハンドラーで SelectedText 値を取得すると、値は空の文字列になります。これは、入力フォーカスがコンボ ボックスからボタンに移動すると、選択が自動的にクリアされるためです。

コンボ ボックスがフォーカスを失うと、選択ポイントがテキストの先頭に移動し、選択されたテキストは選択解除されます。この場合、SelectedText プロパティを取得すると空の文字列が取得され、SelectedText プロパティを設定すると、指定された値がテキストの先頭に追加されます。

コンボ ボックスがフォーカスされると、コントロール内のテキスト全体が自動的に選択されます。コントロールの Focus メソッドを呼び出して入力フォーカスを設定すると、コントロールに既にフォーカスがあるかどうかに関係なく、テキスト全体が選択されます。ユーザーがドロップダウン リストから項目を選択するか、上矢印キーと下矢印キーを使用して項目を選択すると、新しい項目のテキストが自動的に選択されます。ただし、SelectedIndexChanged または SelectedValueChanged イベント ハンドラーで SelectedText 値を取得しようとすると、プロパティは空の文字列を返します。これは、これらのイベントの時点で、以前の SelectedText 値がクリアされており、新しい値がまだ設定されていないためです。SelectedIndexChanged または SelectedValueChanged イベント ハンドラーで現在の値を取得するには、代わりに SelectedItem プロパティを使用します。

于 2013-01-03T15:48:29.067 に答える
1

コンボ ボックスにアイテムを入力し、他に何もしない場合、選択されたアイテムがユーザーまたはコードで明示的に設定されるまで、選択されたアイテムはありません。コンボボックスがデフォルトで最初の項目を選択するように見えるので、これは奇妙に思えますが、それはまさにその通りです。

コンボ ボックスの項目コレクションを作成する for ループの後で、選択した項目を最初の項目に手動で設定してみてください。

foreach (Worksheet temp in xlTemplateWB.Worksheets)
{
    cboBenchSheets.Items.Add(temp.Name);
}

cboBenchSheets.SelectedIndex = 0;
于 2013-01-03T15:49:38.947 に答える