0

在我的应用程序中,我有一个主窗体,它是所有其他窗体的 MdiParent。登录时,默认情况下会打开此表单,并从此表单中的 menustrip 导航到其他表单,如下所示:

public partial class MainMenuForm : Form
{
    public MainMenuForm()
    {
        InitializeComponent();
        this.WindowState = FormWindowState.Maximized;
    }

    private void humanResourceToolStripMenuItem_Click(object sender, EventArgs e)
    {
        HumanResourceForm humanresourceform = new HumanResourceForm();
        humanresourceform.MdiParent = this;
        humanresourceform.Show();
    }
}

在里面HumanResourceForm我有一个按钮,它将导航到另一个表单说EmployeeTransferForm

private void button1_Click(object sender, EventArgs e)
{
    Administraror.Humanresource.EmployeeTransferForm emptranfrm = new Administraror.Humanresource.EmployeeTransferForm();
    emptranfrm.ShowDialog();
}

现在我的问题在于EmployeeTransferForm我想从HumanResourceForm. 此外,不应允许用户在 HumanResourceFormEmployeeTransferForm打开或处于活动状态时关闭它。

我还想获取 TextBox 的 Text 属性,HumanResourceForm例如EmployeeTransferForm

public partial class EmpLoctnChangeForm : Form 
{
    public EmpLoctnChangeForm( )
    {
        InitializeComponent();
    }

    private void EmpLoctnChangeForm_Load(object sender, EventArgs e)
    {
        intemppk = humanresourceform.txtpk.text;
    }
}

期待大家的一些好的建议。
提前致谢。

4

3 回答 3

0

我建议您在EmployeeTransferForm类中定义一些事件(您想要获取属性值的Humanresources表单)并在(您想要访问其属性的表单)中实现它们。我不建议Form在面向对象的体系结构中传递整个对象。

因此,代码形式EmployeeTransferForm可以如下所示:

public class EmployeeTransferForm: Form
{
    public delegate Text GetTextHandler();

    GetTextHandler getSampleTextFromTextBox = null;
    public event GetTextHandler GetSampleTextFromTextBox
    {
        add { getSampleTextFromTextBox += value; }
        remove { getSampleTextFromTextBox -= value; }
    }

    //the rest of the code in the class
    //...
}

而对于Humanresources,像这样:

class Humanresources : Form
{
    private void button1_Click(object sender, EventArgs e)
    {
        Administraror.Humanresource.EmployeeTransferForm emptranfrm = new Administraror.Humanresource.EmployeeTransferForm();
        emptranfrm.GetSampleTextFromTextBox += new EmployeeTransferForm.GetTextHandler(GetSampleTextFromTextBox_EventHandler);
        emptranfrm.ShowDialog();
    }


    Text GetSampleTextFromTextBox_EventHandler()
    {
        return myTextBox.Text;
    }

    //the rest of the code in the class
    //...
}
于 2012-05-20T19:08:00.660 回答
0

您可以创建一个公共静态变量以从其他地方访问它:

public static HumanResourceForm Instance;

然后在构造函数中设置值:

Instance = this;

然后在您的 EmpLoctnChangeForm 中:

intemppk = HumanResourceForm.Instance.txtpk.Test;
于 2012-05-20T19:02:34.590 回答
0

也许看看实现某种“视图控制器”,它负责这些“跨视图”通信和表单创建。这种方法将更好地封装创建表单(视图)并在它们之间共享数据的过程。它将提供更少的视图耦合,例如,如果您想更改视图显示信息的方式,您可以修改一个表单而无需修改另一个表单,该表单依赖于其上的控件是外部可见的,并且命名正确,甚至根本存在。

此视图控制器可以作为构造函数参数传递给视图,或者如果合适,您可以将其实现为系统范围的单例(因为在这种情况下,应用程序上下文的视图控制器不太可能超过 1 个)。

示例界面可能如下所示;

interface IViewController<T>
    where T : Form
{ 
    void ShowForm();
    void ShowFormModal();
}

你可以开始为不同的场景创建专门的 ViewController;

public IEmployeeViewController : IViewController<EmployeeForm>
{
    void ShowForm(string intemppk);
}

这确实是一个关于架构的非常基本的建议,它比我在一篇文章中描述的更复杂,但它可能会让你走上正确的轨道。

于 2012-05-21T05:24:47.750 回答