精华内容
下载资源
问答
  • C# ListBox控件中item换行 C#重绘ListBox项   WindowsForm项目开发中,Listbox控件item数据项,只能一条数据显示在一行,有的时候内容很长,体验就非常之差。简直要歇菜了。哈哈。。。不开玩笑了。下面讲下怎么...

    C# ListBox控件中item换行 C#重绘ListBox项

     

    WindowsForm项目开发中,Listbox控件item数据项,只能一条数据显示在一行,有的时候内容很长,体验就非常之差。简直要歇菜了。哈哈。。。不开玩笑了。下面讲下怎么实现吧!

    新建一个Winform项目,命名为ListAutoline,拖一个按钮(用来填充数据用的,触发吧),一个ListBox控件 . 如图;

    弄完之后呢  将listbox属性项:  把这两个属性设置成如图所示;Enabled可设置可不设置;看个人了; DramMode主要是控制列表框绘制,系统用户绘制每项;可以理解为启用人工绘制的意思啦;

    弄玩上面之后,咱们来看一下怎么绘制这个玩意吧。

    先手动做几条数据吧 搞个Datatable去装数据;代码如下

     Font nfont;
            Color colorn;
            int leftMargines;
            int topMargines;
    
            int distance;
            Font tfont;
            DataTable ListData;
    
            /// <summary>
            /// 初始化数据
            /// </summary>
            private void FillDataTable()
            {
                ListData = new DataTable("List");
                //ListData.Columns.Add("Caption", System.Type.GetType("System.String"));
                ListData.Columns.Add("Text", System.Type.GetType("System.String"));
                ListData.Rows.Add(
                    new object[] 
                    { 
                        //"datagram ", 
                        "工站:过谁丢发货未付哈尔发我份那份辣口味发文分蘖UI违法哈维佛阿文hi服务。" 
                    });
                ListData.Rows.Add(
                    new object[] 
                    { 
                        //"digital signature ",
                        "过谁丢发货未付哈尔发我份那份辣口味发文分蘖UI违法哈维佛阿文hi服务请检查连接P上传"
                    });
                ListData.Rows.Add(
                    new object[]
                    { 
                        //"Digital Signature Standard ",
                        "过谁丢发货未付哈尔发我份那份辣口味发文分蘖UI违法哈维佛阿文hi服务 "
                    });
                ListData.Rows.Add(
                    new object[] 
                    { 
                       // "Distinguished Encoding Rules  ",
                        "过谁丢发货未付哈尔发我份那份辣口味发文分蘖UI违法哈维佛阿文hi服务28;CellId[3]:FXP0290DGWFE90228;"
                    });
                ListData.Rows.Add(
                    new object[] 
                    { 
                        //"electronic codebook  ", 
                        "P过谁丢发货未付哈尔发我份那份辣口味发文分蘖UI违法哈维佛阿文hi服务,请检查 " 
                    });
            }

    然后在Button事件下面这样写; 就是调用那个FillDataTable();再加个ID啥的;

      private void button1_Click(object sender, EventArgs e)
            {
                
                this.FillDataTable();
                this.listBox1.Enabled = false;
                this.listBox1.Items.Clear();
    
                for (int i = 0; i <= ListData.Rows.Count - 1; i++)
                {
                    this.listBox1.Items.Add(i);
                    //this.listBox1.Items.Add(i + ListData.Rows[i]["Text"].ToString());
                }
                this.listBox1.Enabled = true;
            }

    做完以上操作之后,选中Listbox  查看事件;

    新增两个事件; 还有

    新建这两个事件;开始重新绘制Listbox;

    代码如下:

      private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
            {
    
                Graphics gfx = e.Graphics;
                int number = e.Index + 1;
    
                //string xcaption = ListData.Rows[e.Index]["Caption"].ToString();
                string dtext = ListData.Rows[e.Index]["Text"].ToString();
    
                SizeF f1 = gfx.MeasureString(number.ToString() + ".", nfont);
               // SizeF f11 = gfx.MeasureString(xcaption, nfont);
    
                Rectangle rect = new Rectangle(leftMargines + (int)f1.Width + 8, topMargines + (int)f1.Height + distance, this.listBox1.ClientSize.Width - leftMargines - (int)f1.Width - 8, e.ItemHeight);
                StringFormat stf = new StringFormat();
                stf.FormatFlags = StringFormatFlags.FitBlackBox;
                SizeF f2 = gfx.MeasureString(dtext, tfont, rect.Width, stf);
                int Temp = e.ItemWidth;
    
                //if (f2.Width < (leftMargines + f1.Width + 8 + f11.Width)) 
                //    Temp = leftMargines + (int)f1.Width + 8 + (int)f11.Width + 4;
                if (f2.Width < (leftMargines + f1.Width + 8))
                    Temp = leftMargines + (int)f1.Width + 8 + 4;//行间距
    
    
                e.ItemHeight = topMargines + (int)f1.Height + distance + (int)f2.Height + 8 + 8;//上下高度
            }
    
            private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                int number = e.Index + 1;
    
    			//string xcaption = ListData.Rows[e.Index]["Caption"].ToString();
                string dtext = ListData.Rows[e.Index]["Text"].ToString();
    
                if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
                {
                    Graphics gfx = e.Graphics;
    
                    Pen pen = new Pen(Brushes.SteelBlue, 0.4f);
    
                    gfx.DrawRectangle(pen, e.Bounds.X + 4, e.Bounds.Y + 4, e.Bounds.Width - 8, e.Bounds.Height - 8);
                    gfx.FillRectangle(Brushes.LightSteelBlue, e.Bounds.X + 5, e.Bounds.Y + 5, e.Bounds.Width - 9, e.Bounds.Height - 9);
    
    
                    gfx.DrawString(number.ToString() + ".", nfont, Brushes.Black, e.Bounds.X + leftMargines, e.Bounds.Y + topMargines);
                    SizeF f1 = gfx.MeasureString(number.ToString() + ".", nfont);
    
                    //gfx.DrawString(xcaption, nfont, Brushes.SteelBlue, e.Bounds.X + leftMargines + f1.Width + 8, e.Bounds.Y + topMargines);
                    //SizeF f11 = gfx.MeasureString(xcaption, nfont);
    
                    Rectangle rect = new Rectangle(e.Bounds.X + leftMargines + (int)f1.Width + 8, e.Bounds.Y + topMargines + (int)f1.Height + distance, this.listBox1.ClientSize.Width - leftMargines - (int)f1.Width - 8, this.ClientSize.Height);
                    StringFormat stf = new StringFormat();
                    stf.FormatFlags = StringFormatFlags.FitBlackBox;
    
                    gfx.DrawString(dtext, tfont, Brushes.Black, rect, stf);
    
    
                }
                else
                {
                    Graphics gfx = e.Graphics;
                    gfx.FillRectangle(Brushes.White, e.Bounds.X + 4, e.Bounds.Y + 4, e.Bounds.Width - 7, e.Bounds.Height - 7);
                    gfx.FillRectangle(Brushes.SteelBlue, e.Bounds.X + 4, e.Bounds.Y + e.Bounds.Height - 8, e.Bounds.Width - 8, 1);
                    Pen pen = new Pen(Brushes.SteelBlue, 0.4f);
    
                    gfx.DrawString(number.ToString() + ".", nfont, Brushes.Black, e.Bounds.X + leftMargines, e.Bounds.Y + topMargines);
                    SizeF f1 = gfx.MeasureString(number.ToString() + ".", nfont);
    
                    //gfx.DrawString(xcaption, nfont, Brushes.SteelBlue, e.Bounds.X + leftMargines + f1.Width + 8, e.Bounds.Y + topMargines);
                    //SizeF f11 = gfx.MeasureString(xcaption, nfont);
    
                    Rectangle rect = new Rectangle(e.Bounds.X + leftMargines + (int)f1.Width + 8, e.Bounds.Y + topMargines + (int)f1.Height + distance, this.listBox1.ClientSize.Width - leftMargines - (int)f1.Width - 8, this.ClientSize.Height);
                    StringFormat stf = new StringFormat();
                    stf.FormatFlags = StringFormatFlags.FitBlackBox;
                    gfx.DrawString(dtext, tfont, Brushes.Black, rect, stf);
                }
    			e.DrawFocusRectangle();
    		
            }

    然后在窗体Load事件中写入以下代码:

     private void ListAutoLine_Load(object sender, EventArgs e)
            {
                nfont = new Font("Microsoft Sans Serif", 10, FontStyle.Bold);
                tfont = new Font("Microsoft Sans Serif", 10, FontStyle.Regular);
                colorn = Color.Black;
                leftMargines = 8;
                topMargines = 10;
                distance = 12;
            }

    新建窗体SizeChange事件:

     private void ListAutoLine_SizeChanged(object sender, EventArgs e)
            {
                listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
                listBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
            }

    好了,以上代码就实现了ListBox自动换了;写个事件测试测试;

      private void listBox1_Click(object sender, EventArgs e)
            {
                
                MessageBox.Show("当前选中-[" + listBox1.SelectedItem.ToString().Trim() + "]-项");
                MessageBox.Show(getListText(listBox1.SelectedItem.ToString().Trim()));
            }
    

     

    基本上是没有什么问题的啦;

    效果图为:

    就这样子了;

    以上就是本期全部内容了;如有不当之处,还请指正,感谢;欢迎留言讨论;

     

    展开全文
  • C# listBox绑定数据库

    2010-03-01 15:41:55
    C# listBox绑定数据库 以及DropDownList 资源大家一起分享
  • listbox与textbox组合,实现类似google、百度搜索的模糊查询功能。textbox中输入数据,连接数据库进行模糊查找数据库记录,在将记录加载到listbox中。双击listbox中查询到的记录,再传递到testbox中显示。 希望能给...
  • 今天跟着视频学习C#ListBox控件的时候发现ListBox控件中每个项都有两个值, 一个是显示的值:DisplayMember 一个是隐藏的值:ValueMember 以前没注意这些,有可能是这要和数据库绑定用的,以前没这么用过. 现记录下...

    今天跟着视频学习C#ListBox控件的时候发现ListBox控件中每个项都有两个值,

    一个是显示的值:DisplayMember

    一个是隐藏的值:ValueMember

    以前没注意这些,有可能是这要和数据库绑定用的,以前没这么用过.

    现记录下它们的用法

    打开数据库获得数据到表DatatTable中,在绑定到ListBox控件的DataSource中

    设置DisplayMember要显示的列名的值

    设置ValueMember要保存的列名的值

    string sql = string.Format("select mID,mName from {0} where mName like '%{1}%' order by mName asc", WJ_TABLE_NAME, txtFindName.Text);
    
                MyDBAdo ado = new MyDBAdo();
                ado.OpenConn(ConnString);
                DataTable dt = ado.GetDataTable(sql);
                ado.CloseConn();
                listBox1.DataSource = dt;
    
                listBox1.DisplayMember = "mName";
                listBox1.ValueMember = "mID";

    调用:

    string sql = "select mFileText,mKaiSu,mYuYan from {0} where mID='{1}'";
                sql = string.Format(sql, WJ_TABLE_NAME, listBox1.SelectedValue.ToString());
                MyDBAdo ado = new MyDBAdo();
                ado.OpenConn(ConnString);
                OleDbDataReader dr = ado.GetDataRead(sql);
    
                if (dr.Read())
                {
                    ShowData(listBox1.SelectedValue.ToString(), dr["mKaiSu"].ToString(),
                        dr["mYuYan"].ToString(), dr["mFileText"].ToString());
                }
                ado.CloseConn();

    string mid=listBox1.SelectedValue;

    展开全文
  • C# ListBox Item双击事件

    千次阅读 2019-11-08 10:28:34
    C# ListBox Item双击事件 在一次MediaPlayer的练习中,用到了listbox控件,主要的用处是,双击Item,将播放选中的文件,但是,若双击空白处,由于程序得不到相关的参数,就会挂掉,当然也可以利用下面语句来过滤这种...

    C# ListBox Item双击事件

    在一次MediaPlayer的练习中,用到了listbox控件,主要的用处是,双击Item,将播放选中的文件,但是,若双击空白处,由于程序得不到相关的参数,就会挂掉,当然也可以利用下面语句来过滤这种情况:

    if(ListBox1.SelectIndex<0)
    {
    	return;
    }
    

    然而,当其中一个条目Focus时,双击空白,播放器将播放Focused Item。基于这种情况,博主意欲寻求Item_DoubleClick事件来解决此问题,查阅相关资料的到精彩的解决方案。
    首先给出引用相关资料:

    1. 引用一段问题描述(若理解问题原因,可跳过)

    功能很简单,双击Item,将Item的值传TextBox;本来认为很基础很简单的问题,只要在控件的DoubleClick中判断一下就可以了,却没曾想没那么容易,遇到个棘手的问题。网上搜索相关资料,发现这个问题很多人都遇到过,不过解决方案都不怎么好。除了了那引自JS的解决方法还是针对Web的,我想在WinForm下解决,各位看看有什么好方法。
    起初加上if (ListBox1.Items.Count == 0) return;这一句,则在ListBox1的Item为空的时候返回,可在不为空的时候,点击空白处还是会出现问题。于是又判断SelectedIndex,为-1返回,可这么做还是有个问题,在未选中的时候一切正常,但在有选中的Item的时候问题又出现了,我双击空白处,可它把选中的那个Item的值传给TextBox了。
    在论坛里还看到一位仁兄是通过将剩下的Item填充为空,然后判断为空返回,但总感觉不是根本解决之道,

    1. 解决方案
    void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
            {
            // get index Clicked & DoubleClick BlankSpace return NoMatches
                int index = this.listBox1.IndexFromPoint(e.Location);
    		    if (index != System.Windows.Forms.ListBox.NoMatches)
                {
                   return;
                }
                 MessageBox.Show(index.ToString());
                    //do what you wanna do
            }
    
    1. 参考链接
      代码出处
      控件介绍之NoMatches
    展开全文
  • C# ListBox 空白区域自绘 今天学习ListBox用法,对ListBox进行了自绘,实现效果如下图所示: 如图所示,ListBox下方有大片的空白,不够美观,于是修改代码将下方空白区域背景色调整为与上方列表项一致,如下图所示...

    C# ListBox 空白区域自绘

    今天学习ListBox用法,对ListBox进行了自绘,实现效果如下图所示:
    在这里插入图片描述
    如图所示,ListBox下方有大片的空白,不够美观,于是修改代码将下方空白区域背景色调整为与上方列表项一致,如下图所示:
    在这里插入图片描述
    代码如下:

     private void Form1_Load(object sender, EventArgs e)
            {
                this.listBox1.DrawMode = DrawMode.OwnerDrawVariable;
                listBox1.Items.Add("香蕉");
                listBox1.Items.Add("苹果");
                listBox1.Items.Add("桔子");
                listBox1.Items.Add("菠萝");
                listBox1.Items.Add("葡萄");
                listBox1.Items.Add("芒果");
                listBox1.Items.Add("梨");
            }
    
            private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
            {
                e.ItemHeight = 20;
            }
    
            private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
            {
                int index = e.Index;
                Debug.WriteLine(index);
                Debug.WriteLine(e.State);
                if (index < listBox1.Items.Count - 1)
                {
                    if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
                    {
                        LinearGradientBrush backBrush = new LinearGradientBrush(e.Bounds, Color.LightCoral,
                          Color.LightCyan, LinearGradientMode.Horizontal);
                        e.Graphics.FillRectangle(backBrush, e.Bounds);
                    }
                    else if ((e.State & DrawItemState.Selected) != 0)
                    {
                        LinearGradientBrush backBrush = new LinearGradientBrush(e.Bounds, Color.White,
                          Color.Blue, LinearGradientMode.Horizontal);
                        e.Graphics.FillRectangle(backBrush, e.Bounds);
                    }
                }
                else
                {
                    if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
                    {
                        Rectangle itemRect = e.Bounds;
                        Rectangle clientRect = listBox1.ClientRectangle;
                        Rectangle rect = new Rectangle(itemRect.Left, itemRect.Top,
                            itemRect.Width, clientRect.Height - itemRect.Top);
    
                        LinearGradientBrush backBrush = new LinearGradientBrush(e.Bounds, Color.LightCoral,
                              Color.LightCyan, LinearGradientMode.Horizontal);
                        e.Graphics.FillRectangle(backBrush, rect);
                    }
                    else if ((e.State & DrawItemState.Selected) != 0)
                    {
                        LinearGradientBrush backBrush = new LinearGradientBrush(e.Bounds, Color.White,
                          Color.Blue, LinearGradientMode.Horizontal);
                        e.Graphics.FillRectangle(backBrush, e.Bounds);
                    }
                }
    
                string s = listBox1.Items[index].ToString();
                StringFormat sf = new StringFormat();
                sf.LineAlignment = StringAlignment.Center;
                SolidBrush bru = new SolidBrush(Color.Black);
    
                e.Graphics.DrawString(s, e.Font, bru, e.Bounds, sf);
                e.DrawFocusRectangle();
            }
        }
    

    我的思路是在自绘列表中最后一项时,连带其下方空白区域一起绘制,相应的计算出其区域。

    展开全文
  • 0 && listBox1.SelectedIndex < listBox1.Items.Count) textBox2.Text =Convert.ToString( listBox1.Items[listBox1.SelectedIndex]); } private void button2_Click(object sender, EventArgs e) {//点击删除按钮,...
  • C#listBox内容用鼠标拖动和按钮移动实现排序功能 VS2010
  • c# listbox使用Following operations are performing on the ListBox: 在ListBox上执行以下操作: Add 加 Remove 去掉 Clear 明确 Get selected items 获取所选项目 etc... 等等... Follow controls are using in ...
  • C# ListBox列表赋值 listBox1.Items.Add(istr); C# comboBox下拉列表获取所选值 //方法1 int comNum = comboBox1.SelectedIndex; istr = comboBox1.GetItemText(comboBox1.Items[comNum]); //方法2 int comNum = ...
  • C#Listbox绑定集合

    千次阅读 2018-09-15 14:42:53
    ListBox是没有Tag之类的东西,难道无法给他绑定实体类之类的东西吗?这个时候用绑定list集合,然后设置DisplayMember属性,属性值为类显示的属性名称 这个时候用SelectedItem属性获取当前选中的对象,然后转换成实体...
  • c# ListBox 删除选定的多项 本人在网上找了好久,没找到。自己写了一个,参考了好几本书,和一些网络资源,几经修改,终于成功!虽然简单,但对我学c#菜鸟还是挺难得!还附带了一个错误的代码!本人未找到错误,但是...
  • C# ListBox支持右键复制

    千次阅读 2019-09-10 20:48:31
    C# ListBox支持右键复制 public ListBoxForm() { InitializeComponent(); // 支持右键拷贝 ContextMenuStrip listboxMenu = new ContextMenuStrip(); ToolStripMenuItem rightMenu = new ...
  • C#ListBox增加记录

    2020-04-21 12:01:42
    this.listBox.Items.Clear();//ListBox加入数据为追加,在后面罗列,如果想换数据源需要先清空 this.listBox.Items.Add("增加一条记录");//加一条数据 this.listBox.Items.AddRange(List.ToArray()); //AddRange增加...
  • 主要介绍了C#保存listbox中数据到文本文件的方法,涉及C#操作listbox数据的相关技巧,需要的朋友可以参考下
  • C# ListBox:列表框控件

    千次阅读 2020-06-05 11:11:00
    列表框 (ListBox) 将所提供的内容以列表的形式显示出来,并可以选择其中的一项或多项内容,从形式上比使用复选框更好一些。例如,在 Word 中设置字体时界面如下图所示。 在列表框控件中有一些属性与前面介绍的控件...
  • C#ListBox简单应用例子

    2015-09-20 17:33:34
    一个C#ListBox简单应用例子。 实现在ListBox控件间进行数据交换。
  • C#ListBox选择多项

    2020-04-30 09:26:15
    设置其SelectionMode属性的值 MultiExtended:可以选择多项,并且用户可以使用shift键、Ctrl键和方向键来进行选择 MultiSimple:可以选择多项 None:无法选择项 one:只能选择一项 ...
  • 前几天遇到一个需求:选择文件或文件夹压解打包成zip文件然后上传到数据库。想通过FolderBrowserDialog来选择文件夹然后上传,但是发现FolderBrowserDialog只能选择一个文件夹。我的第一想法是做一个类似文件资源...
  • //list自动滚动到底部 if (listBox1.TopIndex == listBox1.Items.Count - (int)(listBox1.Height / listBox1.ItemHeight)) scroll = true; if (scroll) listBox1.TopIndex = listBox1.Items.Count - (int)(listBox1...
  • C# ListBox新增、修改、移除、清空

    万次阅读 2018-12-19 08:52:42
     //listbox选中  private void lstColumn_SelectedIndexChanged(object sender, EventArgs e)  {  if (lstColumn.SelectedIndex > -1)  {  txtColumn.Text = lstColumn.Items[lstColumn.SelectedIndex]....
  • c# listbox显示数据库的内容c# listbox显示数据库的内容
  • c#listbox使用详解和常见问题解决

    千次阅读 2019-02-22 20:12:36
    关于ListBox ListBox是WinForm中的 列表 控件,它提供了一个项目列表(一组数据项),用户可以选择一个或者多个条目,当列表项目过多时,ListBox会自动添加滚动条,使用户可以滚动查阅所有选项。ListBox可以预先...
  • C#ListBox用法

    千次阅读 2017-07-13 17:23:36
    转载自:...如果项总数超出可以显示的项数,则自动向ListBox控件添加滚动条。ListBox控件列表中的每个元素称为项。图1所示为ListBox控件ListBox控件 1.功能 ListBox控件显示较长的选项列表,
  • ListBox中添加一条记录(ListBox.Items.Add方法)后,滚动条会自动回到顶部。我们可能更希望它自动滚动到底部,简要介绍几种方法。  方法一: 1 this.listBox1.Items.Add("new line"); 2 this.listBox1....
  • 数据库的数据某一列填充了listbox,将数据读取到DataTable中,用listBox的DataSource属性与DataTable进行绑定。 DataTable dt = con.mail_acc_Display().Tables[0]; listBox.DataSource = dt; listBox.DisplayMember...
  • 单项: private void button1_Click(object sender, EventArgs e) ... listBox1.Items.Remove(listBox1.SelectedItem); }   多项: ​private void button1_Click(object sender, EventArgs...
  • c# Listbox自动滚动

    2013-02-21 14:22:29
    c# Listbox自动滚动
  • C# ListBox列表赋值的两种方式

    千次阅读 2019-08-08 21:34:57
    C# ListBox列表赋值 C#ListBox控件常用来显示列表信息,如显示指定文件夹下所有文件的路径等。 ListBox控件绑定数据的两种方式: 方式一:为ListBox控件逐一添加数据项 DirectoryInfo dir = new DirectoryInfo...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,179
精华内容 6,471
关键字:

c#listbox

c# 订阅