实现动态控制ToolStrip上ToolStripButton的大小

来源:互联网 发布:starstail mac 破解版 编辑:程序博客网 时间:2024/05/01 15:02
 在我的程序中,ToolStrip上的ToolStripButton是动态加载的,然后又在ToolStrip上添加了一个右击菜单,提供如下几个功能:

1.    显示文字标签/无文字标签

类似于IE上面的工具栏,比如下图,后退就是带文字标签的,主页就是不带文字标签的。

2.    使用大图标/小图标

我在追加的菜单事件中写控制ToolStrip的ImageScalingSize属性的代码:

private void tsmiLargeIcon_Click(object sender, EventArgs e)

{

    this.toolStrip1.ImageScalingSize = new System.Drawing.Size(32, 32);

}

运行后根本不起作用,无意中发现,如果按下【Alt】键就会起作用。于是想在代码中添加

SendKeys.Send("%");

但这不是解决问题的根本办法,而且上面这一句模拟【Alt】键按下代码还得写两遍,因为如果只写一遍的话,菜单的第一项就被选中了,这当然是行的。如果这样能解决问题也可以,但是我发现,当先不显示文字标签,然后再变大小,即便写上【SendKeys.Send(“%”);】也不管用了,还得想其他办法。

后来在事件中添加改变ToolStripButton大小的代码也不起作用,后来发现,ToolStripButton的【AutoSize】属性默认是【true】的,于是修改菜单的单击事件如下:

/// <summary>

/// 大图标单击事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void tsmiLargeIcon_Click(object sender, EventArgs e)

{

    this.toolStrip1.ImageScalingSize = new System.Drawing.Size(32, 32);

    this.toolStrip1.Height = 32;

    foreach (ToolStripItem tsmi in this.toolStrip1.Items)

    {

        if (tsmi is ToolStripButton)

        {

            tsmi.AutoSize = false;

            tsmi.Height = 32;

            tsmi.Width = 32;

            tsmi.AutoSize = true;

        }

    }

}

 

/// <summary>

/// 小图标单击事件

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void tsmiSmallIcon_Click(object sender, EventArgs e)

{

    this.toolStrip1.ImageScalingSize = new System.Drawing.Size(16, 16);

    this.toolStrip1.Height = 23;

    foreach (ToolStripItem tsmi in this.toolStrip1.Items)

    {

        if (tsmi is ToolStripButton)

        {

            tsmi.AutoSize = false;

            tsmi.Height = 16;

            tsmi.Width = 16;

            tsmi.AutoSize = true;

        }

    }

}

运行之后成功了,之所以在改变工具按钮前将【AutoSize】设为【false】,是因为只有设置此项,才能改变ToolStripButton的大小。最后又将【AutoSize】设为【true】是因为,如果不设为【true】文字标签将无法正常显示,大图标时文字标签将因为显示区域的问题而看不到。

效果如下:

原创粉丝点击