最近在做winform,以为这个很简单,但网上一查,没查到,都是说web或其它控件,或者初始化时静态设置。
我需要用代码动态切换。
button1.Font.Underline = true;这句报错,编译不过去,此值是只读的。
方法很简单! 首先给你讲解下遇到"类似问题"的思路:
1、右键button属性。找到他的Font属性,点击属性内容中的按钮。可以看到弹出设置当前button文本的设置界面。选择其中的下划线,然后确定。
2、打开winform的设计界面 xxx.Designer.cs 文件,在InitializeComponent()初始化界面的方法中找到你需要设置下划线的Button代码。 突然恍然大悟。哦 ,原来代码就在这里:
this.button1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); ----具体参数可以自己设置。
我想知道有没有简单的办法,可以不用设置其它属性的。
@沧海一杰: 要想用简单方法你需要了解控件是怎么生成的! 大多控件如果需要满足自己的需求,都是需要自己重写的。 微软提供的控件是为了满足大众的需求。所以微软提供了GDI+等等重绘控件的类库。你可以自己了解下。 比如上面我回答的结果this.button1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134))); 这个就是重绘。调用系统的Drawing。 你可以参考下我前段时间写的两篇重写控件的文章。http://www.cnblogs.com/axing/
我现在写的是自定义控件继承自Button控件,我自定义了一些样式,鼠标放上去下划线,移开没有下划线。我想实现控件自动具有这样的功能,因为界面上有超过10个这样的控件,难道这个功能不能集成到我的控件内部简化吗?
@沧海一杰: 就只为了动态切换字体下划线重绘,这样有点太远了吧。我觉得微软应该提供了这个功能,因为VB6和Delphi等其它软件都有这个功能。
@康忠鑫-Stephen: 网上已经找到解决办法了,不需要重绘。
this.Font = new Font(this.Font, FontStyle.Underline);
this.Font = new Font(this.Font, FontStyle.Regular);
@沧海一杰: - -! 为什么不能集成进去呢? 你既然继承了Button控件,你可以调用Button的MouseLeave和MouseMove等等事件啊。 你可以在事件中调用this.button1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Underline, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
或者
this.button1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
不就行了?
@康忠鑫-Stephen:
这种方法那我在引用的地方想改字体或字号或其它属性,那不就扯了