菜单里项目太多时,能否让它分两列显示? 环境:VS2005 C# WinForm菜单里项目太多时,比如导入IE收藏夹。即使全屏也不够长度。C#菜单的下拉框虽然能显示上下箭头但这种办法难看且操作不便。我看一些软件比如TT、糖果遇到这种情况都是用两列并排的下拉框来显示。请问C#菜单本身是否具有这种功能,如何设置?是不是必需通过自绘的菜单过能实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ListBox是控件,我要的是菜单啊,不明白,请楼上介绍的稍详细些。 将下拉控件的布局方式设置为表格就可以了。ToolStripDropDown dd = toolStripMenuItem1.DropDown;dd.LayoutStyle = ToolStripLayoutStyle.Table;TableLayoutSettings tls = (TableLayoutSettings)dd.LayoutSettings;tls.ColumnCount = 2; 在窗体上拖一个Panel,把控件都放进去,设计的美观点,想多少列都行,将Panel的Visible设置为false然后将菜单按钮的点击设置为panel1.Visible=true;即点击按钮时显示Panel,然后将Panel的MouseLeave事件设置为panel1.Visible=false;即当鼠标离开panel控件使自动隐藏该控件也可以使用ListView或者ListBox控件代替或者一起使用,使用方法同上,这两个控件怎么用就不用说了吧呵呵 或者使用WPF,更强大原文地址:http://www.codeproject.com/KB/WPF/ribboncontrol.aspxWPF菜单详解:http://www.codeproject.com/Articles/55599/Windows-Ribbon-for-WinForms-Part-0-Table-of-Conten.aspx 非常感谢各位的回复!一风的办法更为简单直接。yalan的办法可用来解决一些更为复杂的应用。还想请教下一风:设了双列显示后,我的菜单项被轮流显示在两列里。而我希望是先在一列中放,放满了后再放到另一列。因为收藏夹中有文件夹和文件,还有我的控制菜单项。我不希望它们被交替显示在两列中。请问如何做? 我在回帖的时候也想到过这个问题,不过这个问题的确不是太好回答。如果要控件本身来实现一列列的放,至少我目前不知道有没有这样的方法,不过我想这里可以变通一下,在数据源上下功夫,看例子。比如有这样的数据源:A1, A2, A3, B1, B2, B3如果直接加载到控件里就是这样的形式:A1 A2A3 B1B2 B3这可能并不是我们想要的结果,但假如把数据源的排列改变一下:A1, B1, A2, B2, A3, B3那生成的菜单就是我们想要的了:A1 B1A2 B2A3 B3但到此为止,问题并没有完全解决,每一列菜单的行数是否要控制呢?怎么控制呢?呵呵,因为没有从事这样开发的经验,我暂时没有解决办法,期待达人。 感谢一风哥再次回贴,我正是用调整数据源排列次序的方法来变通的: ToolStripDropDown dd = this.M_Favorites.DropDown; dd.LayoutStyle = ToolStripLayoutStyle.Table; TableLayoutSettings tls = (TableLayoutSettings)dd.LayoutSettings; tls.RowCount = 20; tls.GrowStyle = TableLayoutPanelGrowStyle.AddColumns; ToolStripDropDown newdown = new ToolStripDropDown(); ArrayList down = new ArrayList(); int n = M_Favorites.DropDownItems.Count / 2; int m = 1; //Table布局方式下是一行行显示菜单项,我需要它一列列来显示,找不到改变C#显示方式的办法 //只好改变我菜单项的顺序了 for (int i = 0; i < this.M_Favorites.DropDownItems.Count;++i ) { if (i == 0) { down.Add(this.M_Favorites.DropDownItems[i]); } else { if (IsOdd(i) && n < this.M_Favorites.DropDownItems.Count) { down.Add(this.M_Favorites.DropDownItems[n]); n ++; } else if( m < this.M_Favorites.DropDownItems.Count) { down.Add(this.M_Favorites.DropDownItems[m]); m ++; } } } for (int i = 0; i < down.Count;++i ) { newdown.Items.Add((ToolStripItem)down[i]); } this.M_Favorites.DropDown = newdown; //------------------------------------------ /// <summary> /// 判断一个数是否是奇数 /// </summary> /// <param name="n"></param> /// <returns></returns> public static bool IsOdd(int n) { if (n % 2 != 0) { return true; } else { return false; } } C# 模除问题,大家来教教我这个新手吧... C# DataGridView中嵌套一个复选框(CheckBox)怎样让CheckBox灰显? 求高手解答问题 winform中有没有类似快捷菜单的空控件,给下控件的名字。。。 C#字符串函数问题: 想做个分销系统,大家给点建议,C/S?B/S? 〓在线菜鸟问〓★★★自己重写的Paint函数未被执行★★★ 我想用C#来做一个奇迹外挂,请问怎么下手 WinForm 为何会在无任何错误提示的情况下自动关闭 WinForm中DataGridView使用问题请教 【ASP.net文档】用C#实现HTTP协议下的多线程文件传输 手动为C#程序设置ico图标
tls.ColumnCount = 2;
在窗体上拖一个Panel,把控件都放进去,设计的美观点,想多少列都行,将Panel的Visible设置为false
然后将菜单按钮的点击设置为panel1.Visible=true;即点击按钮时显示Panel,然后将Panel的MouseLeave事件设置为panel1.Visible=false;即当鼠标离开panel控件使自动隐藏该控件
也可以使用ListView或者ListBox控件代替或者一起使用,使用方法同上,这两个控件怎么用就不用说了吧呵呵
http://www.codeproject.com/KB/WPF/ribboncontrol.aspxWPF菜单详解:
http://www.codeproject.com/Articles/55599/Windows-Ribbon-for-WinForms-Part-0-Table-of-Conten.aspx
如果要控件本身来实现一列列的放,至少我目前不知道有没有这样的方法,不过我想这里可以变通一下,在数据源上下功夫,看例子。
比如有这样的数据源:
A1, A2, A3, B1, B2, B3
如果直接加载到控件里就是这样的形式:
A1 A2
A3 B1
B2 B3
这可能并不是我们想要的结果,但假如把数据源的排列改变一下:
A1, B1, A2, B2, A3, B3
那生成的菜单就是我们想要的了:
A1 B1
A2 B2
A3 B3
但到此为止,问题并没有完全解决,每一列菜单的行数是否要控制呢?怎么控制呢?呵呵,因为没有从事这样开发的经验,我暂时没有解决办法,期待达人。
ToolStripDropDown dd = this.M_Favorites.DropDown;
dd.LayoutStyle = ToolStripLayoutStyle.Table;
TableLayoutSettings tls = (TableLayoutSettings)dd.LayoutSettings;
tls.RowCount = 20;
tls.GrowStyle = TableLayoutPanelGrowStyle.AddColumns; ToolStripDropDown newdown = new ToolStripDropDown();
ArrayList down = new ArrayList(); int n = M_Favorites.DropDownItems.Count / 2;
int m = 1; //Table布局方式下是一行行显示菜单项,我需要它一列列来显示,找不到改变C#显示方式的办法
//只好改变我菜单项的顺序了
for (int i = 0; i < this.M_Favorites.DropDownItems.Count;++i )
{
if (i == 0)
{ down.Add(this.M_Favorites.DropDownItems[i]); }
else
{
if (IsOdd(i) && n < this.M_Favorites.DropDownItems.Count)
{
down.Add(this.M_Favorites.DropDownItems[n]);
n ++;
}
else if( m < this.M_Favorites.DropDownItems.Count)
{
down.Add(this.M_Favorites.DropDownItems[m]);
m ++;
}
}
} for (int i = 0; i < down.Count;++i )
{
newdown.Items.Add((ToolStripItem)down[i]);
} this.M_Favorites.DropDown = newdown; //------------------------------------------ /// <summary>
/// 判断一个数是否是奇数
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
public static bool IsOdd(int n)
{
if (n % 2 != 0)
{
return true;
}
else
{
return false;
}
}