计时器无法获取控制文本框数据

时间:2016-04-17 01:27:47

标签: c# timer

所以我试图从Timer执行一个方法的问题是,每当我调用该方法并传递一个字符串作为参数时,自动将该字符串设置为NULL并且这很奇怪,是否有修复或其他什么,如果你想查看它,这里有一些代码

    private void timer1_Tick(object sender, EventArgs e)
    {
        int currentHour = FixTime(DateTime.Now.ToString("hh tt"));
        int currentMinute = FixTime(DateTime.Now.ToString("mm tt"));
        int currentSeconds = FixTime(DateTime.Now.ToString("ss tt"));
        string currentTT = DateTime.Now.ToString("tt");

        int userHour = Settings.Default.hour;
        int userMinute = Settings.Default.minutes;
        int userSeconds = Settings.Default.seconds;
        string userTT = Settings.Default.TT;

        if (currentHour == userHour && currentMinute == userMinute &&
            currentSeconds == userSeconds && currentTT == userTT)
        {
            MakeThePost(postTextBox.Text); // the postTextBox.Text field automatically is set to null
        }
    }

    private void MakeThePost(string data)
    {
        string text = data;
        if (!String.IsNullOrEmpty(text))
        {
           fb.Post("me/feed", new { message = text });
        }
        else
            MessageBox.Show("Nothing to post on facebook", "Field is   empty",MessageBoxButtons.OK, MessageBoxIcon.Error);
    }

UPDATE:所以显然问题不在于计时器甚至在MakeThePost中真正的问题是在我试图显示的另一种形式,当它显示构造函数创建一个新的Form1对象时,为什么我make this?,因为我想访问主窗体中的控件,但是当我执行Form1构造函数来创建一个新对象时,Form1 postTextBox控件停止更新其Text属性,那么还有另一种方法来访问主窗体控件没有初始化对象?

1 个答案:

答案 0 :(得分:0)

发布的代码似乎不包含任何会导致postTextBox.Text属性变为null的内容。

您的应用程序中必须有其他内容使该属性为空。确保数据绑定未以静默方式将其设置为null

在调用MakeThePost的行和MakeThePost的第一行上插入断点,然后运行应用程序。

仅在调用之前查看属性是null,还是在方法之前和之内查看属性。

编辑:

根据您的最新编辑,您似乎正在创建一个新的Form1实例,而您应该在实例化Form2

时传递对现有实例的引用

添加Form2构造函数,该构造函数将Form1对象作为参数:

public partial class Form2 : Form
{
    private Form1 otherForm;
    public Form2()
    {
        InitializeComponent();
    }

    public Form2(Form1 frm) : this()
    {
        otherForm = frm;
    }

    //Other methods and properties of Form2
}

然后创建Form2的新实例:

Form2 secondForm = new Form2(form1Instance);

现在,在Form2实例中,您有otherForm引用,这将允许您调用Form1实例的公共成员。您可能需要更改某些Form1成员的访问修饰符才能将其公开。