C# 如何使用代码添加控件及控件事件

Posted 北风几吹夏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 如何使用代码添加控件及控件事件相关的知识,希望对你有一定的参考价值。

1.首先简单设计一下界面:
添加了Click事件

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <StackPanel Name="addButtonSp" Margin="5">
            <Button FontSize="20" Foreground="Blue" Click="OnButtonClick">在窗口加入按钮</Button>
        </StackPanel>
    </ScrollViewer>
</Window>

2.在代码部分,简单设计一下控件属性
就是在点击上面Button 按钮时,界面自动添加一个按钮

private void OnButtonClick(object sender, RoutedEventArgs e)
{
    Button btn = new Button();
    btn.Background = Brushes.LightBlue;
    btn.Foreground = Brushes.Yellow;
    btn.Height = 50;
    btn.Content = "按钮";
    btn.Click += new RoutedEventHandler(mes);
    addButtonSp.Children.Add(btn);
}

重点来了,
btn.Click += new RoutedEventHandler(mes);
这行代码,就是用来指定所添加的button控件的点击事件,必须要用RoutedEventHandler(),其次()里面是被调用的事件函数,请往下看:
private void mes(object sender, RoutedEventArgs e),注意参数写法

private void mes(object sender, RoutedEventArgs e)
{
    MessageBoxResult a = MessageBox.Show("你点击了?", "Tip",MessageBoxButton.YesNoCancel,MessageBoxImage.Error);
    if (a == MessageBoxResult.Yes)
    {
        MessageBox.Show("你又点击了?", "haha", MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}
这部分的全部代码
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OnButtonClick(object sender, RoutedEventArgs e)
    {
        Button btn = new Button();
        btn.Background = Brushes.LightBlue;
        btn.Foreground = Brushes.Yellow;
        btn.Height = 50;
        btn.Content = "按钮";
        btn.Click += new RoutedEventHandler(mes);
        addButtonSp.Children.Add(btn);
    }

    private void mes(object sender, RoutedEventArgs e)
    {
        MessageBoxResult a = MessageBox.Show("你点击了?", "Tip",MessageBoxButton.YesNoCancel,MessageBoxImage.Error);
        if (a == MessageBoxResult.Yes)
        {
            MessageBox.Show("你又点击了?", "haha", MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }
        else if(a == MessageBoxResult.No)
        {
            this.Close();
        }
    }

3.结果
a.启动界面

b.疯狂加入按钮

c.随机点击一个按钮

添加button控件,再通过此控件调用其它函数,成功了O(∩_∩)O哈哈~

花絮:
其实,在实验二 图层操作.pdf中,老师给的代码就用了这个代码(>‿◠)✌

Collection:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。

c#中的progressBar控件如何使用?

我在窗体里添加了progressBar又添加了一个时间触发器,时间触发器的Tick事件如下:
private void timer1_Tick(object sender, EventArgs e)

if (progressBar1.Value < 100)
this.progressBar1.Value++;
else
this.timer1.Enabled = false;

可那个进度就是不变,哪位大虾帮忙解决下!
这是个很奇怪的现象,我又重新创建了一个progressBar2控件,仅把触发器Tick事件代码中的progressBar1改成progressBar2,其他什么都没改,progressBar2却可以正常向前滚动,无语...
那再问下,哪个属性是改变其滚动效果的,例如跑马灯效果?
就是if (progressBar1.Value < 100),这个问题还要我来教你们么? timer1.Enabled的值我一直设置的是真!请看清楚我的补充提问好不好! 现在我不想谈论progressBar1控件了,我想问问它的哪个属性是改变其滚动效果的,例如跑马灯效果?

你先得设置timer1.Enabled = true;才能启用这个事件

progressBar1.Value是改变progressBar的滚动效果
progressbar1.Step是调用progressBar1.PerformStep();方法的progressBar的增量,你那个if (progressBar1.Value < 100)
this.progressBar1.Value++; //每执行一次是timer1_Tick事件progressBar1的Value增加1
progressbar1.Maximum是progressBar的最大值也就是百分比的基数
参考技术A 设置Value属性值的不断递增(也可以递减)就会显示相应的滚动效果。
如果不是timer1的问题,可能你把你的progressBar1的前景色和背景色设置成了同一种颜色,看不到效果了,你可以看一下源码比较一下你现在二个progressbar的属性设置有什么差别;也或者仅仅是一时的软件错误而已,不会有什么大问题。
参考技术B 块状进度条的话你有没有设定Maximum和Minimum的值啊?
如果是说跑马灯的那种你试试把prograssStyle设置成Marquee,然后上面有个调整Speed的属性,把它调成30~
参考技术C if (progressBar1.Value < 100)

应该是大于 100吧??
参考技术D timer1.start()执行之前,先这样试试
progressbar1.Maximum=100;
progressbar1.value=0;
progressbar1.step=1;
第5个回答  2009-01-29 当<100时,你把timer1.Enable=false了,停了呀,所以不再有事件产生了。。。

以上是关于C# 如何使用代码添加控件及控件事件的主要内容,如果未能解决你的问题,请参考以下文章

WPF C# 如何在动态添加的grid控件中添加某个网格中的image控件的单击事件?

c#中的progressBar控件如何使用?

vs写c#时,自动根据控件生成的代码不小心被删除了,窗口设计还在,如何重新自动生成?

C# keyup 事件问题

用户控件的问题引出及解决思路

WPF中如何通过C#代码改变控件Backgroung的颜色