ListBox类似于Enabled的属性,还有吗?

isyuan 2010-11-23 10:35:35
我用VB.NET 2005,做了一个窗体,这个窗体的功能是浏览数据库中的记录。
这个窗体上有一个控件是ListBox,这个ListBox绑定了数据源,运行看起来很正常,一点问题都没有。

可是我只想让用户浏览,不想让用户在控件上更改选择,要实现在功能,几乎与Enabled属性一模一样,但Enabled属性设置为false之后,这个控件虽然可以只浏览不更改,但是ListBox显示的字会蒙上一层灰白色,看起来很不爽。

如果能看起来一切正常,只能浏览,不响应用户的操作,最是完美了,有没有类似于Enabled的其他的属性可以用?或者思路?

我的编程经验还不是很丰富,在这里提问,请大家集思广议,谢谢:-)
...全文
85 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
沐NeMo 2010-11-25
  • 打赏
  • 举报
回复
學習了。
isyuan 2010-11-25
  • 打赏
  • 举报
回复
高人果然是高人。
机器人 2010-11-25
  • 打赏
  • 举报
回复
重写的代码:



using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ListBoxOverwrite
{
class MyListBox : ListBox
{

protected override void OnDrawItem(DrawItemEventArgs e)
{
if (DesignMode || Enabled)
{
base.OnDrawItem(e);
return;
}

// Set the DrawMode property to draw fixed sized items.
DrawMode = DrawMode.OwnerDrawFixed;

// Draw the background of the ListBox control for each item.
e.DrawBackground();
// Define the default color of the brush as black.
Brush normalBrush = Brushes.Black;
Brush selectedBrush = Brushes.White;

// Draw the current item text based on the current Font and the custom brush settings.
if (e.Index == SelectedIndex)
e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, selectedBrush, e.Bounds, StringFormat.GenericDefault);
else
e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, normalBrush, e.Bounds, StringFormat.GenericDefault);

// If the ListBox has focus, draw a focus rectangle around the selected item.
e.DrawFocusRectangle();
}

protected override void OnEnabledChanged(EventArgs e)
{
base.OnEnabledChanged(e);
if (Enabled)
DrawMode = DrawMode.Normal;
else
DrawMode = DrawMode.OwnerDrawFixed;
Refresh();
}

}
}

机器人 2010-11-25
  • 打赏
  • 举报
回复
也行,那样最好封装个用户控件,需要处理一下:当用户改变窗体大小时Listbox发生的位移。
qiuwentianmingxin 2010-11-24
  • 打赏
  • 举报
回复
需要的话重新连接
tianxin1 2010-11-24
  • 打赏
  • 举报
回复
就着样么 管用么
ygg1314 2010-11-24
  • 打赏
  • 举报
回复
直接把ListBox设为不可编辑不行吗?
沐NeMo 2010-11-24
  • 打赏
  • 举报
回复
好像很简单的。
你设置一下里面的:selectionMode=none 就满足你的要求了。
isyuan 2010-11-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 linjimu 的回复:]
好像很简单的。
你设置一下里面的:selectionMode=none 就满足你的要求了。
[/Quote]

不对。在这个窗体中ListBox绑定了数据源,实际显示效果是ListBox中有某一行被选择了,所以selectionMode=none 是不让选择,肯定不行。
目的是,让用户浏览被选择的行,而不能用鼠标或键盘改变行。

有一个思路是能不能在这个ListBox上面叠一个透明的图片?这样鼠标就点不上去了。可行不,是不是很傻?
isyuan 2010-11-24
  • 打赏
  • 举报
回复
不对。在这个窗体中ListBox绑定了数据源,实际显示效果是ListBox中有某一行被选择了,所以selectionMode=none 是不让选择,肯定不行。
目的是,让用户浏览被选择的行,而不能用鼠标或键盘改变行。

有一个思路是能不能在这个ListBox上面叠一个透明的图片?这样鼠标就点不上去了。可行不,是不是很傻?
Tosp2012 2010-11-24
  • 打赏
  • 举报
回复
或者改用其他控件來顯示,比如DataGridView
机器人 2010-11-23
  • 打赏
  • 举报
回复
没有了,重写吧。

16,554

社区成员

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

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