Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations strongm on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Component Scope Problem

Status
Not open for further replies.

brentnewbury

Programmer
May 1, 2001
30
GB
Hiya all,

I'm having problems when trying to change the value of a textbox from a thread. I've also tried creating a function inside the Form1 class then calling it from within the thread, but that doesn't seem to work either.

Here is the code:
[tt]using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Threading;

namespace ComponentScopeTesting
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
public System.Windows.Forms.TextBox textBox1;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(16, 224);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(16, 16);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 1;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}

private void button1_Click(object sender, System.EventArgs e)
{
TestThread oTest = new TestThread();
Thread oThread = new Thread(new ThreadStart(oTest.EntryPoint));

oThread.Start();

Thread.Sleep(10);

oThread.Abort();
}

public class TestThread : Form1
{
public void EntryPoint()
{
this.textBox1.Text = "Hello World";
MessageBox.Show("Test", "Test", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}[/tt]

Thank you for your time,

Brent Newbury
 
Anyone?

I just want to know how to access a component like a textbox or button outside of the form scope.

Can anyone help?

Brent
 
Windows Forms are single-threaded. You can only safely change a value in them from the thread that created the form unless you use the BeginInvoke method along with a delegate. You may still have repaint problems even after that, depending on how you coded things.

Chip H.




____________________________________________________________________
If you want to get the best response to a question, please read FAQ222-2244 first
 
obislavu has a good example of using BeginInvoke at thread732-868602

Chip H.


____________________________________________________________________
If you want to get the best response to a question, please read FAQ222-2244 first
 
Thank you both for your replies,

I did look at Thread732-868602, but it didn't seem to make much sense to me. I tried looking for delegates and other things but never, did a search for BeginInvoke(). Oh well.

Thank you both.

Brent
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top