求大神帮看一个自定义控件的问题

java_liyi 2015-05-31 09:50:14
这个百度知道的地址
http://zhidao.baidu.com/question/561640463956383484
我实在是想不通为什么了...
折腾了几个小时了,Menustrip,toolbar都试了一遍,全都不行,运行时都会自动初始化
toolstripbutton始终不会隐藏

求大神指导,感激不尽
...全文
150 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
java_liyi 2015-06-01
  • 打赏
  • 举报
回复
引用 9 楼 superliu1122 的回复:

[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content)]
public ToolStripButton barAdd = new ToolStripButton();
这样试试
大神 还是不行啊 你有关于设计时和 运行时编程的文章或者书什么的么,求介绍啊
superliu1122 2015-06-01
  • 打赏
  • 举报
回复

[DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Content)]
public ToolStripButton barAdd = new ToolStripButton();
这样试试
java_liyi 2015-06-01
  • 打赏
  • 举报
回复
总算搞定了,研究一晚上,原来是要自定义ComponentDesigner
java_liyi 2015-05-31
  • 打赏
  • 举报
回复
感谢版主的支持,虽然这种方法是可行的,但是我不能采用,因为这意味着我需要在Menustrip中暴露所有的toolstripitem属性才能完全的控制toolstripitem, 这肯定不符合实际。 我想做的是,我在自定义的menustrip中添加一些barAdd,barDelete的按钮,然后再menustrip的items项目编辑器中对每一个toolstripitem的属性进行编辑,就像DataGridView里面对Row和Column的编辑那样,但是我现在面临的问题是,当我把我自定义的Menustrip拖到窗体上并将barAdd的visible属性改为false时,在窗体的设计器文件里没有产生相应的代码,这使得每次我运行时控件都被初始化成一开始定义的样子,没有实现隐藏效果 我不明白为什么,因为当我修改menustrip的其他属性时,设计器中会自动添加我修改的代码,但是对items的toolstripbutton做修改时,却没有添加相应的代码。
threenewbee 2015-05-31
  • 打赏
  • 举报
回复
这有什么难的呢? 新建一个自定义控件,放一个toolstrip,里面放几个toolstripButton,比如叫 tsbNew tspSave tspDel 添加几个属性,比如 public bool NewButtonEnabled { get { return tsbNew.Enabled; } set { tsbNew.Enabled = value; } } 别的类似。 这样你的控件放在窗体上就可以自由设置了。
java_liyi 2015-05-31
  • 打赏
  • 举报
回复
这些预定义的按钮可以禁用,隐藏,添加事件等,有点像BindingNavigator那种,只是我想自己做做看能不能实现那种效果
java_liyi 2015-05-31
  • 打赏
  • 举报
回复
...我就想实现自定义一个有新增、删除、保存的toolstrip控件
threenewbee 2015-05-31
  • 打赏
  • 举报
回复
你直接说你要做什么。你想达到什么效果。不要说你的过程。因为你的过程也有问题。
java_liyi 2015-05-31
  • 打赏
  • 举报
回复
这个是创建组建时生成的构造函数,我这前也试过:base(),但是没用
效果如知道里说的那样,在设计器里我设置barAdd的visible属性为false,但是运行起来visible还是true,最绝的是,当我关闭运行的程序后,设计器直接将barAdd的visible = false重置为true了,我跟了一下程序,感觉是在new这个对象时重置的,因为后面没有自动生成barAdd.visible = false的代码,所以被重置了也好像很正常,但是我就是 不明白,我修改toolstrip的其他属性时都自动在设计文件中生成了代码,但是为什么对toolstrip.item的项设置时,却没有生成代码,是需要什么特殊的语法么?
截图
这是自定义控件时设计文件里的代码

private void InitializeComponent()
{
this.SuspendLayout();
//
// Component1
//
this.InitBar();
this.LayoutStyle = System.Windows.Forms.ToolStripLayoutStyle.VerticalStackWithOverflow;
this.ResumeLayout(false);

}

public void InitBar()
{
if (barAdd == null) barAdd = new ToolStripButton();
barAdd.Text = "hehe";
this.Items.Add(barAdd);
}

这是编译后拖到一个窗口上的效果

这是我用属性编辑器修改的属性

这是运行效果

这是运行完以后

这是运行后的属性值


threenewbee 2015-05-31
  • 打赏
  • 举报
回复
什么叫自动初始化,你想自定义什么效果。
  • 打赏
  • 举报
回复
虽然没试验,但你继承ToolStrip为啥构造函数里面都不继承基类构造函数的?

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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