关于ToolStripSplitButton的问题,请教! ToolStripSplitButton表示左侧标准按钮和右侧下拉按钮的组合,怎么才能让下拉项不是系统默认的而是可以是定制的控件,比如下拉按钮时显示的是一个ListView或者ListBox,就像vs ide中Redo,Undo List的下拉时出现效果,谢谢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自定义一个usercontrol用于host你的Listview。自定义一个SplitButton,设置其DropDown为你的usercontrol。示例代码: public interface IDataProvider { string[] GetData(); event EventHandler DataChanged; } public class StackListControl : UserControl { private Panel panel; private ListView myview; private IDataProvider _dataProvider; public StackListControl(IDataProvider dataProvider) { _dataProvider = dataProvider; _dataProvider.DataChanged += new EventHandler(_dataProvider_DataChanged); } void _dataProvider_DataChanged(object sender, EventArgs e) { PopulateList(); } private void PopulateList() { // get data from the provider // and update the listview } //... } public class MySplitButton : ToolStripSplitButton { StackListControl _listControl; public MySplitButton() { IDataProvider provider = CreateDataProvider(); _listControl = new StackListControl(provider); _listControl.Dock = DockStyle.Fill; ToolStripControlHost controlHost = new ToolStripControlHost(_listControl); controlHost.Dock = DockStyle.Fill; controlHost.Margin = Padding.Empty; DropDown = new ToolStripDropDown(); DropDown.Items.Add(controlHost); DropDownDirection = ToolStripDropDownDirection.BelowRight; DropDownOpened += new EventHandler(MySplitButton_DropDownOpened); } void MySplitButton_DropDownOpened(object sender, EventArgs e) { _listControl.Focus(); // ... } private IDataProvider CreateDataProvider() { throw new NotImplementedException(); } } 数据库问题~~~ 高金求正则 如何实现博客技术?(虚拟分配域名) 新建项目时出错:Visual Studio .NET 已检测到指定Web服务器运行的不是ASP.NET 1.1版。您将无法运行ASP.NET Web应用程序或服务 100分,如何监控本机上网记录? VS.NET是用什么程序写的? MDI+TabControl的非常奇怪的问题 如何 通过载入的.cur(鼠标指针文件) 修改鼠标指针 C# 数组有没有整个数组赋初值的快速的办法? 原来的WSDL服务接口说明,为什么在.NET下直接应用不了? 请教专业人才与高手(感谢之余绝不吝啬给分)!! 请教Linq,Select new问题
自定义一个SplitButton,设置其DropDown为你的usercontrol。
示例代码:
public interface IDataProvider {
string[] GetData();
event EventHandler DataChanged;
} public class StackListControl : UserControl {
private Panel panel;
private ListView myview;
private IDataProvider _dataProvider; public StackListControl(IDataProvider dataProvider) {
_dataProvider = dataProvider;
_dataProvider.DataChanged += new EventHandler(_dataProvider_DataChanged);
} void _dataProvider_DataChanged(object sender, EventArgs e)
{
PopulateList();
} private void PopulateList() {
// get data from the provider
// and update the listview
} //...
} public class MySplitButton : ToolStripSplitButton {
StackListControl _listControl;
public MySplitButton() {
IDataProvider provider = CreateDataProvider();
_listControl = new StackListControl(provider);
_listControl.Dock = DockStyle.Fill; ToolStripControlHost controlHost = new ToolStripControlHost(_listControl);
controlHost.Dock = DockStyle.Fill;
controlHost.Margin = Padding.Empty; DropDown = new ToolStripDropDown();
DropDown.Items.Add(controlHost);
DropDownDirection = ToolStripDropDownDirection.BelowRight;
DropDownOpened += new EventHandler(MySplitButton_DropDownOpened);
} void MySplitButton_DropDownOpened(object sender, EventArgs e)
{
_listControl.Focus();
// ...
} private IDataProvider CreateDataProvider() {
throw new NotImplementedException();
}
}