有没有一种方法来禁用组合框的值更改而不使它在Windows窗体中灰显?我看到了一些帖子,但他们是WPF的,并没有帮助我的情况。我可以禁用WinForms中的组合框而不使它灰色吗?
回答
上设置这些你comobobox
会做你正在寻找的伎俩,组合已启用,但没有人可以改变或键入任何所以外观=启用,行为=禁用:)
comboBox1.DropDownHeight = 1;
comboBox1.KeyDown += (s, e) => e.Handled = true;
comboBox1.KeyPress += (s, e) => e.Handled = true;
comboBox1.KeyUp += (s, e) => e.Handled = true;
如果你因为某些原因不能使用lambdas,那么以下处理程序可以关联。右击 - >粘贴必须额外处理,如果你有DropDownStyle = DropDown。
//void comboBox1_KeyUp(object sender, KeyEventArgs e)
//{
// e.Handled = true;
//}
//void comboBox1_KeyPress(object sender, KeyPressEventArgs e)
//{
// e.Handled = true;
//}
//void comboBox1_KeyDown(object sender, KeyEventArgs e)
//{
// e.Handled = true;
//}
如果我使用鼠标会发生什么? – 2011-04-01 01:00:27
什么也没有,用鼠标也没有什么可改变的。 – 2011-04-01 01:01:24
我该如何重新启用它? – MBU 2011-04-01 01:58:35
然后保存他的处理程序作为变量,并简单地 - =他们之后。
例子:
var keyDown = (s, e) => e.Handled = true;
var keyPress = (s, e) => e.Handled = true;
var keyUp = (s, e) => e.Handled = true;
然后在替换他的:
comboBox1.KeyDown += keyDown;
comboBox1.KeyPress += keyPress;
comboBox1.KeyUp += keyUp;
然后,当你想删除:
comboBox1.KeyDown -= keyDown;
comboBox1.KeyPress -= keyPress;
comboBox1.KeyUp -= keyUp;
它不像使用var那样简单,使用Sanjeevakumar的方法和 - =那些。 – 2011-04-01 02:28:02
或者使用'e.Handled = someBoolVar',其中someBoolVar的状态为enabled/disabled。 – 2011-04-01 02:31:11
我该如何重置DropDownHeight的高度?我最初应该储存高度吗?并重置它,当我想重新启用? – MBU 2011-04-01 02:46:18
在在GotFocus投手(不管它是叫) ,把重点放在别的东西上。
不,不够好。使其被禁用,看起来正好像原来的,所以用户完全被愚弄。添加一个新课程并粘贴此代码。
using System;
using System.Drawing;
using System.Windows.Forms;
class FakeComboBox : ComboBox {
private PictureBox fake;
public new bool Enabled {
get { return base.Enabled; }
set { if (!this.DesignMode) displayFake(value);
base.Enabled = value;
}
}
private void displayFake(bool enabled) {
if (!enabled) {
fake = new PictureBox();
fake.Location = this.Location;
fake.Size = this.Size;
var bmp = new Bitmap(fake.Size.Width, fake.Size.Height);
this.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
fake.Image = bmp;
this.Parent.Controls.Add(fake);
fake.BringToFront();
fake.Click += delegate { Console.Beep(); };
}
else {
this.Parent.Controls.Remove(fake);
fake.Dispose();
fake = null;
}
}
}
当你重新启用它时,你在Win7上获得的非常轻微的'辉光'是非常有趣的。
哈哈,太棒了。尽管这是荒谬的,但它仍然是一个比将DropDownHeight设置为0更好的解决方案。 – 2011-04-01 03:46:12
我忘记了Beep(),已更正。 – 2011-04-01 03:51:20
当此控件启用时,尝试再次启用设置。此代码试图处置'虚假',它是空的。并抛出异常。其次,它仍然看起来很灰,任何主题变化都必须处理,如果它看起来像一个启用组合。 – 2011-04-01 05:50:36
- 1. 禁用组合框,使的组合框灰色
- 2. 如何禁用灰色的组合框?
- 3. 我应该使用WinForms组合框的SelectedItem,SelectedText或SelectedValue吗?
- 4. 是否可以更改Winforms组合框以禁用键入内容?
- 5. Workflow Foundation - 我可以使它适合吗?
- 6. 我们可以创建所有组合框引用的组合框事件吗?
- 7. 使组合框在禁用时可见
- 8. 如何禁用UITabBarItem而不使灰色项目
- 9. 我可以使用作曲家而不安装它吗?
- 10. 我们可以使用按钮而不是集合视图吗?
- 11. 如何禁用android微调器而不使它变灰?
- 12. WPF组合框禁用背景颜色
- 13. WPF和WinForms可以在应用程序中混合使用吗?
- 14. 我可以禁用ASP.NET中的#include吗?
- 15. jquery禁用可选灰色元素
- 16. 可以使用JMonkey引擎而不使用着色器吗?
- 17. 我可以使用Paint.NET API将它嵌入到Winforms应用程序中吗?
- 18. 如何使UITableViewCellAccessoryDisclosureIndicator以橙色而不是灰色显示?
- 19. 如何使UITableViewCellAccessoryDisclosureIndicator以橙色而不是灰色显示?
- 20. 我可以在OpenSSL中禁用MAC吗?
- 21. 您可以使组框不可见,但是它的内容可见吗?
- 22. 禁用(灰色)前一行
- 23. 我可以使用箭头键而不是选项卡导航进出wpf组合框吗?
- 24. 我可以使用我的RegularExpression属性而不是DataAnnotations吗?
- 25. 在Winforms中,我可以配置组合框以允许不在下拉列表中的值?
- 26. 是否可以在我的VS c#winforms项目中使用MS访问中的(多列)组合框控件?
- 27. 使用cakePHP,我可以递增列的值而不先读取它的值吗?
- 28. Winforms-如何获得组合框(我)
- 29. 禁用的组合框
- 30. 我可以在WinForms中使用Silverlight WCF RIA吗?
如果您只想拒绝更改 - 然后处理相应的方法并执行此操作。 – 2011-04-01 00:03:12
所以你想要一个看起来很正常的组合框,但用户无法与之交互?你打算如何向用户表明它处于这种不可用的状态? – 2011-04-01 00:14:06
这是一个非常糟糕的主意。灰显组合框是用户知道它被禁用并且不能修改它的方式。一个组合框* *启用,但忽略用户尝试编辑它,这是一个令人困惑的问题。我会打电话给那个界面**破碎**。 – 2011-04-01 00:16:48