1

開いているシリアルポートをアイテムとして含むコンボボックスが必要です。ただし、シリアルポートが変更されると自動的に更新されます。

私のアプローチはこれです:

  1. Xamlで次のようなコンボボックスを作成します。

    <ComboBox Height="23" HorizontalAlignment="Left" Margin="87,35,0,0" Name="comboBox1" VerticalAlignment="Top" Width="147" ContextMenuOpening="comboBox1_ContextMenuOpening" />
    
  2. トラフポートをループしてcomboBoxに追加するメソッドを作成します。

    public string[] portsManual;
    
    public void adaugaPorturi()
    {
        if (comboBox1.Items.Count > 0)
        {
            comboBox1.Items.RemoveAt(0);
        }
        comboBox1.Items.Add("Select port");
        comboBox1.SelectedItem = "Select port";
        portsManual = SerialPort.GetPortNames();
        foreach (string port in portsManual)
        {
            comboBox1.Items.Add(port);
        }
        comboBox1.Items.Refresh();
        Array.Clear(portsManual, 0, portsManual.Length);
    }
    
  3. このメソッドをwindow.loadで呼び出し(何かを入れることができます-ポートはすぐに開きます)、ContextMenuOpeningイベントで呼び出します(コンボボックスをクリックしてアイテムを選択するたびに-ポート、更新します)

注:最初にcomboBoxアイテム(存在する場合)をクリアし、文字列配列についても同じですが、更新されません。アイテムは、このメソッドの最初の実行時のものです。

私が試したのは、ObservableCollection、文字列、配列ですが、運がありません。私がこのサイトで見つけたほとんどの情報。ポートが少ないので、コレクションやリストは本当に必要ないと思います。アイテムを直接追加するだけです。

ところで、管理者はこの投稿を編集できますか?テキスト形式が適切かどうかはわかりません。

4

1 に答える 1

2

まず、ビューのコードビハインドから直接シリアルポートをクエリするのではなく、MVVMとデータバインディングを使用する必要があります。

次に、間違ったイベントを使用しているようです。メニューが開くたびに更新する場合は、DropDownOpenedイベントを使用する必要があります

<ComboBox Height="23" HorizontalAlignment="Left" Margin="87,35,0,0" Name="comboBox1" VerticalAlignment="Top" Width="147" DropDownOpened="comboBox1_DropDownOpened" />

そして、これをコードビハインドで試してください

public void InitPorts()
{
    RefreshPorts();
    comboBox1.SelectedItem = "Select port";
}
public void RefreshPorts()
{
    comboBox1.Items.Clear();
    comboBox1.Items.Add("Select port");
    foreach (var port in SerialPort.GetPortNames())
        comboBox1.Items.Add(port);
}
private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
{
    InitPorts();
}
private void ComboBox1_OnDropDownOpened(object sender, EventArgs e)
{
    RefreshPorts();
}
于 2013-01-28T19:25:27.107 に答える