我不希望用户能够更改组合框中显示的值.我一直在使用,Enabled = false但它会使文本变灰,所以它不是很易读.我希望它的行为像文本框一样ReadOnly = true,文本正常显示,但用户无法编辑它.
有没有办法实现这个?
小智 150
make DropDownStyle属性DropDownList而不是DropDown
处理TextChanged事件以防止用户更改文本.
Dan*_*ams 11
不确定这是不是你想要的但是......
设置DropDownStyle = DropDownList
然后在SelectedIndexChanged事件上
If (ComboBox1.SelectedIndex <> 0)
{
ComboBox1.SelectedIndex = 0
}
Run Code Online (Sandbox Code Playgroud)
这个丑陋的部分是他们会"感觉"他们可以改变它.他们可能认为这是一个错误,除非你给他们一个警告,告诉他们为什么他们不能改变价值.
我可以建议的最好的事情是用只读文本框(或者只是标签)替换组合框 - 这样用户仍然可以选择/复制值等.
当然,另一个厚脸皮的策略是设置DropDownStyle为DropDownList,并删除所有其他选项 - 然后用户没有别的选择;-p
这是只读组合的最佳解决方案。
private void combo1_KeyPress(object sender, KeyPressEventArgs e)
{
e.KeyChar = (char)Keys.None;
}
Run Code Online (Sandbox Code Playgroud)
它将丢弃组合的按键。
我已经通过继承 ComboBox 添加一个 ReadOnly 属性来处理它,该属性在设置时隐藏自己并在顶部显示一个包含相同文本的 ReadOnly TextBox:
class ComboBoxReadOnly : ComboBox
{
public ComboBoxReadOnly()
{
textBox = new TextBox();
textBox.ReadOnly = true;
textBox.Visible = false;
}
private TextBox textBox;
private bool readOnly = false;
public bool ReadOnly
{
get { return readOnly; }
set
{
readOnly = value;
if (readOnly)
{
this.Visible = false;
textBox.Text = this.Text;
textBox.Location = this.Location;
textBox.Size = this.Size;
textBox.Visible = true;
if (textBox.Parent == null)
this.Parent.Controls.Add(textBox);
}
else
{
this.Visible = true;
this.textBox.Visible = false;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
83161 次 |
| 最近记录: |