请教如何设置COMBOBOX为只读,不可选择

哥是龙王 2009-06-25 11:39:28
请教如何设置COMBOBOX为只读,不可选择,注意,不是要求不可输入的那种,是要求不可选择,因为我只要作为显示,就是类似Readonly那种设置一样的效果。谢谢。
...全文
1464 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanlongwuhui 2009-07-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fujiandragon 的回复:]
如何重载EnabledChanged?有代码吗?谢谢
[/Quote]
网上搜索下
rqx110 2009-06-30
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fujiandragon 的回复:]
问题又来了,解决了一并结贴

我把各个控件放到GROUPBOX容器中,再把groupbox容器Enable属性设为假,这样可以一次性把控件设置为只读,这时候信息内容都是暗灰色的,现在我想修改这个颜色为黑色,该在哪里处理呢?谢谢

[/Quote]

ForeColor=Color.Black
哥是龙王 2009-06-29
  • 打赏
  • 举报
回复
如何重载EnabledChanged?有代码吗?谢谢
yanlongwuhui 2009-06-28
  • 打赏
  • 举报
回复
重载EnabledChanged
pjagz 2009-06-27
  • 打赏
  • 举报
回复
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
ComboBox1.SelectedIndex = -1

End Sub
哥是龙王 2009-06-27
  • 打赏
  • 举报
回复
问题又来了,解决了一并结贴

我把各个控件放到GROUPBOX容器中,再把groupbox容器Enable属性设为假,这样可以一次性把控件设置为只读,这时候信息内容都是暗灰色的,现在我想修改这个颜色为黑色,该在哪里处理呢?谢谢
outou 2009-06-25
  • 打赏
  • 举报
回复
解决了就好。
rqx110 2009-06-25
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
using System.Drawing;

public class ExComboBox : ComboBox
{
private bool m_Unselectable = false;
DblPanel pnl = new DblPanel();
private const int WM_MOUSEWHEEL = 256;
private const int WM_LBUTTONDOWN = 0x201;
private const int WM_LBUTTONDBLCLK = 0x0203;
private const int VK_SHIFT = 0x10;

public ExComboBox()
{
pnl.Width = 17;
pnl.Height = this.Height - 2;
pnl.Left = this.Width - 18;
pnl.Top = 1;
this.Controls.Add(pnl);
pnl.BringToFront();
pnl.Visible = false;
}

protected override void OnKeyPress(KeyPressEventArgs e)
{
if (m_Unselectable == true)
e.Handled = true;
else
base.OnKeyPress(e);
}

protected override void OnKeyDown(KeyEventArgs e)
{
if (m_Unselectable == true)
{
if ((int)e.KeyData == 131139)
if (this.SelectedText != null)
Clipboard.SetText(this.SelectedText);
e.Handled = true;
}
else
base.OnKeyDown(e);
}

protected override void OnResize(EventArgs e)
{
base.OnResize(e);
pnl.Left = this.Width - 18;
}

public bool ReadOnly
{
get
{
return m_Unselectable;
}
set
{
m_Unselectable = value;
MakeUnselectable(m_Unselectable);
}
}

private void MakeUnselectable(bool Unselectable)
{
if (m_Unselectable == true && this.DropDownStyle != ComboBoxStyle.Simple)
{
pnl.Visible = true;
}
else
{
pnl.Visible = false;
}
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (m_Unselectable == true)
{
if (this.DropDownStyle == ComboBoxStyle.DropDownList)
{
if (keyData != Keys.Tab)
return true;
}
else
{
if (keyData == Keys.Up || keyData == Keys.Down || keyData == Keys.PageUp || keyData == Keys.PageDown)
return true;
}
}
return base.ProcessCmdKey(ref msg, keyData);
}

protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
}

protected override void WndProc(ref Message m)
{
if (this.m_Unselectable == true)
{
if (m.Msg == WM_MOUSEWHEEL || m.Msg == WM_LBUTTONDBLCLK)
return;
if (m.Msg == WM_LBUTTONDOWN)
{
this.Focus();
return;
}
}

base.WndProc(ref m);
}

protected override void OnDropDownStyleChanged(EventArgs e)
{
if (this.DropDownStyle == ComboBoxStyle.Simple)
pnl.Visible = false;
else
if (m_Unselectable == true)
pnl.Visible = true;
else
pnl.Visible = false;

base.OnDropDownStyleChanged(e);
}

protected class DblPanel : Panel
{
protected override void OnPaint(PaintEventArgs e)
{
if (this.Visible == true)
{
ComboBoxRenderer.DrawDropDownButton(e.Graphics, e.ClipRectangle, System.Windows.Forms.VisualStyles.ComboBoxState.Disabled);
}
}
}

}

fuda_1985 2009-06-25
  • 打赏
  • 举报
回复
昏,刚想说enable呢。
CloneCenter 2009-06-25
  • 打赏
  • 举报
回复
恭喜楼主终于找到答案了。
哥是龙王 2009-06-25
  • 打赏
  • 举报
回复
自己解决。
怎么就没看到ENABLE呢?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧