Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于支持不透明度的按钮的实施建议_C#_Winforms_Button_Implementation_Opacity - Fatal编程技术网

C# 关于支持不透明度的按钮的实施建议

C# 关于支持不透明度的按钮的实施建议,c#,winforms,button,implementation,opacity,C#,Winforms,Button,Implementation,Opacity,在C#中,我没有找到一种方法来创建一个支持不透明度的按钮——而不是在调用show方法时出现,以便能够将其慢慢淡入视图 我创建了自己的按钮,我想知道您对实现的看法 基本上,我创建了一个Windows窗体,它支持不透明度属性,并处理了所有关于将窗体“添加”到另一个窗体的情况,具体来说: -位置更改事件 -所有者窗体失去焦点 表单由一个表示按钮文本的标签组成,仅此而已 表单构造函数获取标签的文本、按钮的所需大小以及按钮出现的速度(基于枚举)。 在表单加载方法< /强>中,标签位于按钮的中间。 单击标签

在C#中,我没有找到一种方法来创建一个支持不透明度的按钮——而不是在调用show方法时出现,以便能够将其慢慢淡入视图

我创建了自己的按钮,我想知道您对实现的看法

基本上,我创建了一个Windows窗体,它支持不透明度属性,并处理了所有关于将窗体“添加”到另一个窗体的情况,具体来说: -位置更改事件 -所有者窗体失去焦点

表单由一个表示按钮文本的标签组成,仅此而已

表单构造函数获取标签的文本、按钮的所需大小以及按钮出现的速度(基于枚举)。 在<强>表单加载方法< /强>中,标签位于按钮

的中间。 单击标签或表单本身时将执行一个简单的图形,并向捕获它的人引发一个事件

我的代码:

  • 创建了一个名为buttonForm的表单
  • 建造师

            InitializeComponent();
            this.Owner = owner;
            _buttonText = buttonText;
            _buttonSize = buttonSize;
            _usedSpeedOpacity = SelectSpeedOpacity(showSpeed);
    
  • 演示单击命令的方法-当用户单击表单和标签本身时调用:

        this.Location = new Point(this.Location.X + 1, this.Location.Y);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        Thread.Sleep(50);
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
        this.Location = new Point(this.Location.X - 1, this.Location.Y);
        if (Button_Clicked != null)
        {
            Button_Clicked();
        }
    
  • 窗体负载-定位控件中间的标签等:

        labelButtonText.Text = _buttonText;
        this.Size = _buttonSize;
        double remainning = this.Width - labelButtonText.Size.Width;
        Point labelNewLocation = new Point(
            (int)(remainning / 2),
            (int)(this.Height / 2 - this.Font.Height / 2));
        labelButtonText.Location = labelNewLocation;
    
  • FadeShow(和FadeHide相同)

  • 我的按钮点击事件

  • 提前感谢,


    Oz.

    我对一个改变高度的windows窗体做了类似的操作。我这样做的方式是在代码中实现一个计时器,这样每半秒不透明度就会改变一次

    如果没有您的代码,下面的答案不是100%正确的,但很难向您展示

    void timer_Tick(object sender, EventArgs e)
            {            
                if (btnName.Opacity < 100)
                {
                    btnName.Opacity++;
                    timer2.Stop();
                    timer2.Interval = 5000;
                    timer2.Start();
                } else {
                    timer2.Stop();
               }
            }
    
    void timer\u Tick(对象发送方,事件参数e)
    {            
    如果(btnName.Opacity<100)
    {
    btnName.Opacity++;
    timer2.Stop();
    时间间隔=5000;
    timer2.Start();
    }否则{
    timer2.Stop();
    }
    }
    
    检查这个不错的方法,但如果我理解正确,它并不完全是我需要的-这是一个支持不透明度的控件,我需要一个不透明度淡入淡出控件有趣的方法,但是我相信这将意味着当前线程将持续忙碌,如果您使用后台工作人员,您可能会报告进度,然后以这种方式更新不透明度。如果你想,我可以发布代码,你的意思是一个背景线会画按钮?很好。虽然我喜欢在我的应用程序中使用更少的计时器,但这总比打开一个线程要好。您对我的实现有何看法?您能发布实现代码吗?因为我更容易理解代码:)
        this.Location = new Point(
            this.Location.X - (ParentFormLocation.X - newLocation.X),
            this.Location.Y - (ParentFormLocation.Y - newLocation.Y));
        ParentFormLocation = newLocation;
    
    void timer_Tick(object sender, EventArgs e)
            {            
                if (btnName.Opacity < 100)
                {
                    btnName.Opacity++;
                    timer2.Stop();
                    timer2.Interval = 5000;
                    timer2.Start();
                } else {
                    timer2.Stop();
               }
            }