c# - 从另一个窗体调用方法c#

标签 c# winforms

我有一个像这样的主窗体:

public partial class MainForm : Form
{
    string FileName = "";

    public MainForm()
    {
        InitializeComponent();
    }

    private void goToToolStripMenuItem_Click(object sender, EventArgs e)
    {

    }

    private void menuItem_Click(object sender, EventArgs e)
    {
        ToolStripMenuItem menuItem = (ToolStripMenuItem ) sender;

        switch (menuItem.Name.Replace("ToolStripMenuItem",""))
        {
            case "new":
                MenuItemNew();
                break; 
            case "open" :
                MenuItemOpen();
                break;
            case "save":
                MenuItemSave();
                break;
            case "saveAs" :
                MenuItemSaveAs();
                break;
          case "exit" :
                MenuItemExit();
                break;
            case "selectAll" :
                MenuItemSelectAll();
                break;
        }
    }

    private void MenuItemSelectAll()
    {
        textBox.SelectAll();
    }

    private void MenuItemExit()
    {
        this.Close();
    }

    private void MenuItemSaveAs()
    {
        SaveFileDialog sfd = new SaveFileDialog();
        sfd.Filter = "Text Document |*.txt";
        if (sfd.ShowDialog() == DialogResult.OK)
        {
            StreamWriter writer = new StreamWriter(sfd.FileName);
            writer.Write(textBox.Text);
            writer.Close();
        }
    }

    private void MenuItemSave()
    {
        if (FileName == "")
        {
            MenuItemSaveAs();
        }
        else
        {
            StreamWriter writer = new StreamWriter(FileName);
            writer.Write(textBox.Text);
            writer.Close();
        }
    }

    private void MenuItemOpen()
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Filter = "Text Document|*.txt";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            FileName = ofd.FileName;
            StreamReader reader = new StreamReader(ofd.FileName);
            textBox.Text = reader.ReadToEnd();
            reader.Close();
        }
    }

    private void MenuItemNew()
    {
        if (textBox.Text == "")
        {
            textBox.Text = String.Empty;
        }
        else
            this.Show();
            Newform sistema=new Newform();
        sistema.ShowDialog();
    }
}

还有像这样的 Newform:

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

    private void cancel_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private void dontsave_click(object sender, EventArgs e)
    {

    }

    private void save_Click(object sender, EventArgs e)
    {
        this.Hide();
    }
}

当在我的新表单中单击“保存”时,我需要 MenuItemSaveAs 在我的主表单中打开。

最佳答案

第一

 public void MenuItemSaveAs()

然后

private void save_Click(object sender, EventArgs e)
{
    this.Hide();   
    ((MainForm)Parent).MenuItemSaveAs()
}

这假设您的表单是 MainForm 的子表单。如果不是,那么您需要将对 MainForm 的引用传递到表单的构造函数中并将其保存在本地。 (还有一种方法可以始终找到当前程序的主要形式,但我认为这不是解决问题的优雅方法。)

关于c# - 从另一个窗体调用方法c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20007074/

相关文章:

wpf - WPF 中的 IWin32Window

C# 异步服务器/客户端架构

c# - 将自定义对象添加到 C# 中的选中列表框

c# - 在函数中使用 LINQ

c# - 限制标签中的字符数

vb.net - 是否可以让 WebView 控件读取本地 html 文件?

c# - 如何让组合框重新测量项目高度?

c# - 为什么此对象相等性测试失败?

c# - 为什么我的 IdentityRoles 和 ApplicationUsers 没有填充到我的数据库中?

c# - 使用C#WinForms,如何修改系统音频输出,即均衡音频?