我想知道是否有人可以帮助我解决我遇到的一个小问题。我正在尝试从另一个类更新文本框,但文本框中没有显示文本,即使它已经发送,因为我已将其打印到屏幕上。
我正在使用的代码如下:
Program.cs的
namespace Search
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
try
{
Application.SetCompatibleTextRenderingDefault(false);
}
catch (InvalidOperationException e)
{
}
Application.Run(new Form1());
}
public static readonly Form1 MainLogWindow = new Form1();
}
}
HexToASCII:
public class HexToASCII
{
Output o = new Output();
public void hexToAscii(String hex, int textBox)
{
//Convert the string of HEX to ASCII
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hex.Length; i += 2)
{
string hs = hex.Substring(i, 2);
sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16)));
}
//Pass the string to be output
string convertedHex = sb.ToString();
Program.MainLogWindow.UpdateTextBox(convertedHex);
}
}
Form1中:
private delegate void NameCallBack(string varText);
public void UpdateTextBox(string input)
{
if (InvokeRequired)
{
textBox2.BeginInvoke(new NameCallBack(UpdateTextBox), new object[] { input });
}
else
{
textBox2.Text = textBox2.Text + Environment.NewLine + input;
}
}
我试图使用新线程ThreadStart ts = delegate()运行它...但是我无法让文本框更新。对不起,我对c#很新,有人可以解释一下这个问题,这样我就能理解并下次学习。非常感谢:))
答案 0 :(得分:4)
这是问题所在:
static void Main()
{
...
Application.Run(new Form1());
}
public static readonly Form1 MainLogWindow = new Form1();
您正在创建两个表单:其中一个表单正在显示(使用Application.Run
),但您正在更改另一个表单上的文本框内容:
Program.MainLogWindow.UpdateTextBox(convertedHex);
你没有首先展示你如何调用hexToAscii
- 我个人会尽量避免对这样的GUI元素进行静态引用,但你可以获得你的只需更改要使用的Main
方法即可使用代码:
Application.Run(MainLogWindow);