很长时间以来,我都使用通常的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;
}
}
答案 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()