所以我试图从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属性,那么还有另一种方法来访问主窗体控件没有初始化对象?
答案 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
成员的访问修饰符才能将其公开。