用C#中的另一个表单更改表单的变量

时间:2018-12-17 22:24:24

标签: c# forms winforms

第一个问题,我是编程新手,但是我似乎无法使用另一种形式(code(form1))来更改形式的变量:

public partial class Main : Form
{

    private string emptyOrNull = "You must first input a valid link!";
    public string homepage = "https://google.com";

    private void NavigateToPage()
    {
        button1.Enabled = false;
        txtUrl.Enabled = false;
        webBrowser.Navigate(txtUrl.Text);
    }

这是来自form2(设置)的代码:

public partial class Settings : Form
{

    Main main = new Main();

    public Settings()
    {
        InitializeComponent();
        txtHomepage.Text = main.homepage;
    }

    private void btnSave_Click(object sender, EventArgs e)
    {
        main.homepage = txtHomepage.Text;
        this.Close();
    }

每当我按保存时,它将返回默认字符串“ google.com”。我怎样才能解决这个问题?

3 个答案:

答案 0 :(得分:0)

Main表单作为参数传递给Settings对象中的自定义构造函数。现在,您正在声明Main页面的新实例,而不引用已经打开的页面。

启动您的Main页面的Settings中的任何方法应如下所示:

var settingsPage = new Settings(this);
settingsPage.Show();

错别字致歉。在没有VS的手机上。

UPDATE-Settings构造函数:

public partial class Settings : Form
{

   Main main = new Main();

   public Settings()
   {
       InitializeComponent();
       txtHomepage.Text = main.homepage;
   }
   public Settings(Main fromMain)
   {
       InitializeComponent();
       main = fromMain;
       txtHomepage.Text = main.homepage;
   }

   private void btnSave_Click(object sender, EventArgs e)
   {
       main.homepage = txtHomepage.Text;
       this.Close();
   }
}

答案 1 :(得分:0)

我找到了另一个解决我的问题的线程,它是:Send values from one form to another form

我不知道该如何做。然后我意识到,当在btnSave_click块下时,我可以这样做:

private void btnSave_Click(object sender, EventArgs e)
    {
        this.DialogResult = DialogResult.OK;
        this.Close();
    }

将采用TheValue变量,该变量返回了textBox.text变量,并将其分配给form1的主页变量。

还是,谢谢您的回答。

答案 2 :(得分:-1)

您可以只使用Session集合,即:

string GetHomePage()
{
     if(Session["HOME"] == null) 
     {
         string h = "https://google.com";
         Session["HOME"] = h;
         return h;
     }
     return (string)Session["HOME"];
}

void SetHomePage(string homePage)
{
    Session["HOME"] = homePage;
}

只要在同一IIS会话中,就可以从任何页面访问Session集合。 IIS会话可以通过登录,在IIS上超时等来确定,但这是另一个主题。