更新文本框时,C#无法看到文本

时间:2012-02-19 19:02:26

标签: c# textbox

我想知道是否有人可以帮助我解决我遇到的一个小问题。我正在尝试从另一个类更新文本框,但文本框中没有显示文本,即使它已经发送,因为我已将其打印到屏幕上。

我正在使用的代码如下:

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#很新,有人可以解释一下这个问题,这样我就能理解并下次学习。非常感谢:))

1 个答案:

答案 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);