C# WinForm窗体之间传值有哪些

Viewed 20

C# WinForm窗体之间传值有哪些

1 Answers

在C# WinForm应用程序中,窗体之间传值有多种方式,以下是几种常见的方法:

1. 构造函数传值

通过在目标窗体的构造函数中传递参数,可以将数据从源窗体传递到目标窗体。

// 源窗体
private void OpenTargetForm()
{
    string data = "Hello, World!";
    TargetForm targetForm = new TargetForm(data);
    targetForm.Show();
}

// 目标窗体
public partial class TargetForm : Form
{
    private string _data;

    public TargetForm(string data)
    {
        InitializeComponent();
        _data = data;
    }

    private void TargetForm_Load(object sender, EventArgs e)
    {
        // 使用传递过来的数据
        label1.Text = _data;
    }
}

2. 属性传值

在目标窗体中定义公共属性,通过设置属性值来传递数据。

// 源窗体
private void OpenTargetForm()
{
    string data = "Hello, World!";
    TargetForm targetForm = new TargetForm();
    targetForm.Data = data;
    targetForm.Show();
}

// 目标窗体
public partial class TargetForm : Form
{
    public string Data { get; set; }

    private void TargetForm_Load(object sender, EventArgs e)
    {
        // 使用传递过来的数据
        label1.Text = Data;
    }
}

3. 事件传值

通过事件机制,在目标窗体中触发事件,源窗体监听事件并获取数据。

// 目标窗体
public partial class TargetForm : Form
{
    public event EventHandler<string> DataSent;

    private void button1_Click(object sender, EventArgs e)
    {
        string data = "Hello, World!";
        DataSent?.Invoke(this, data);
    }
}

// 源窗体
private void OpenTargetForm()
{
    TargetForm targetForm = new TargetForm();
    targetForm.DataSent += TargetForm_DataSent;
    targetForm.Show();
}

private void TargetForm_DataSent(object sender, string data)
{
    // 处理接收到的数据
    MessageBox.Show(data);
}

4. 静态变量传值

通过静态变量在窗体之间共享数据。

// 源窗体
private void OpenTargetForm()
{
    string data = "Hello, World!";
    SharedData.Data = data;
    TargetForm targetForm = new TargetForm();
    targetForm.Show();
}

// 目标窗体
public partial class TargetForm : Form
{
    private void TargetForm_Load(object sender, EventArgs e)
    {
        // 使用共享的数据
        label1.Text = SharedData.Data;
    }
}

// 共享数据类
public static class SharedData
{
    public static string Data { get; set; }
}

5. 使用委托传值

通过委托将数据从目标窗体传递回源窗体。

// 源窗体
private void OpenTargetForm()
{
    TargetForm targetForm = new TargetForm();
    targetForm.OnDataSent += TargetForm_OnDataSent;
    targetForm.Show();
}

private void TargetForm_OnDataSent(string data)
{
    // 处理接收到的数据
    MessageBox.Show(data);
}

// 目标窗体
public partial class TargetForm : Form
{
    public delegate void DataSentHandler(string data);
    public event DataSentHandler OnDataSent;

    private void button1_Click(object sender, EventArgs e)
    {
        string data = "Hello, World!";
        OnDataSent?.Invoke(data);
    }
}

这些方法各有优缺点,选择哪种方法取决于具体的应用场景和需求。

桂ICP备18011783号-1