DropDownList的默认文本

时间:2019-03-05 12:10:47

标签: winforms powershell combobox

很长时间以来,我都使用通常的DropDown作为ComboBoxStyle。但是,我在ComboBox中只有2个项目,在这种情况下手动搜索看起来是不合理的。因此,我决定引用DropDownList,因为其中的文本是不可变的。

但是,与此同时,我遇到了一个问题。在没有选择任何元素的情况下(如果我理解正确,在这种情况下选择了-1元素),我将无法显示默认文本,例如,从列表中选择元素的邀请。带有ComboBox.Text ("Please, select any value")的变体不再起作用(因为文本是不可变的),在这里我很困惑,因为我不知道该怎么做。

当然,我试图在C#分支中查找某些内容,但没有找到任何适用于Powershell的内容。这是我尝试过的选项,它不起作用:

$MethodComboBox.Add_TextChanged($defaultLabel)
$defaultLabel =
{
    if ($ComboBox.SelectedIndex -lt 0)
    {
        $ComboBox.Text = "Please, select any value";
    }
    else
    {
        $ComboBox.Text = $ComboBox.SelectedText;
    }
}

1 个答案:

答案 0 :(得分:2)

您可以将DrawMode中的ComboBox设置为OwnerDrawFixed,然后处理DrawItem事件并在索引为-1时呈现自定义选择文本:< / p>

Add-Type -AssemblyName System.Windows.Forms
$form = New-Object System.Windows.Forms.Form
$combo = New-Object System.Windows.Forms.ComboBox
$combo.DropDownStyle = [System.Windows.Forms.ComboBoxStyle]::DropDownList
$combo.DrawMode = [System.Windows.Forms.DrawMode]::OwnerDrawFixed
$combo.Width = 200
$combo.ItemHeight = 24
$combo.Items.Add("Male")
$combo.Items.Add("Female")
$form.Controls.Add($combo)
$combo.Add_DrawItem({param($sender,$e)
    $text = "-- Select Gender --"
    if ($e.Index -gt -1){
        $text = $sender.GetItemText($sender.Items[$e.Index])
    }
    $e.DrawBackground()
    [System.Windows.Forms.TextRenderer]::DrawText($e.Graphics, $text, $combo.Font, `
        $e.Bounds, $e.ForeColor, [System.Windows.Forms.TextFormatFlags]::Default)
})
$form.ShowDialog() | Out-Null
$form.Dispose()

enter image description here enter image description here