Why doesnt textbox print or var change?

B

Brad Rogers

All,

Being immersed in vb.net and trying CSharp after almost a year I forgot the
differences. I like vb fixing the uppercase/lowercase names and seeming to
be more flexible to code entry.

But while trying to insert a text box to see when a method is used, and
putting a counter to bump some variable?

The textbox sits there unchanged. I put a breakpoint at the text write
command, watching the var countx which stays at 1. If I use countx++ it
stays at zero. In vb I might try me.textbox1.text = "text". If I try
This.textBox1.text = it gets an error saying "This" ? what is that?

//TextBox textBox1 = new TextBox(); But if commented out, it never sees
textBox1

if(pth.IsVisible(pnt))

{

countx = countx+=1;

//countx++;

//countx+=1'

textBox1.Text = "count is : " + countx.ToString() ;

return true;

}
 
B

Bruce Wood

Well, first of all, as you pointed out, C# is case sensitive, so the
keyword is 'this', not 'This'.

Second, are you sure that you're not being bitten by the fact that the
text in the TextBox isn't redrawn until after your method returns to
the O/S? While your code is running, if you change the Text property of
TextBox, the TextBox is simply marked as "dirty" to be redrawn later,
when you're finished doing whatever you're doing. If you are running in
a loop and setting the value of the text box as you go, you won't see
it update until the end.

If the problem is that "countx" isn't being updated properly, then you
didn't show us enough code for us to know why, because we can't see
where countx is declared.
 
B

Brad Rogers

Thanks,

here is more of the code, its a drawing program, if I put the breakpoint at
the start of the method, it will break the first time when a line is drawn,
then anytime the mouse is moved over the form area (after its continued)

I will include all the code at the bottom here. I tried "this" but that
doesnt work, I hate to use the excuse of "it works in vb.net" but (it
does). When countx is declared? outside of the method, dont tell me scope
got me also,

public bool IsInLine(Point pnt)

{

Pen p = new Pen(Color.Black,PenWidth);

GraphicsPath pth=new GraphicsPath();

pth.AddLine(StartPoint,EndPoint);

pth.Widen(p);

p.Dispose();

if(pth.IsVisible(pnt))

{

countx = countx+=1;

//textBox1.Text = "count is : " + countx.ToString() ;

//findlines.Line (TTT.Text) = "ddfdfd";

//TextBox TTT;

this.TTT.Text = "fs" + countx.ToString();


return true;

}

// textBox textBox1 = new TextBox();

return false;

}

}

And the entire Form:





using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;


namespace findlines

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;


private Line CurrentLine;

private bool AddingLine;

private LineArray Lines=new LineArray();

private Point LastPos;

public System.Windows.Forms.TextBox TTT;

private bool first = true;


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()

{

System.Configuration.AppSettingsReader configurationAppSettings = new
System.Configuration.AppSettingsReader();

this.TTT = new System.Windows.Forms.TextBox();

this.SuspendLayout();

//

// TTT

//

this.TTT.Location = new System.Drawing.Point(104, 16);

this.TTT.Name = "TTT";

this.TTT.Size = new System.Drawing.Size(168, 20);

this.TTT.TabIndex = 0;

this.TTT.Text = ((string)(configurationAppSettings.GetValue("TTT.Text",
typeof(string))));

this.TTT.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.BackColor = System.Drawing.Color.White;

this.ClientSize = new System.Drawing.Size(292, 273);

this.Controls.Add(this.TTT);

this.Name = "Form1";

this.Text = "Form1";

this.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);

this.MouseUp += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);

this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

this.MouseMove += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);

this.ResumeLayout(false);

}

#endregion


/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new Form1());

}




private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)

{

CurrentLine = new Line();

CurrentLine.StartPoint=new Point(e.X,e.Y);

AddingLine = true;

}


private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)

{

Graphics g=CreateGraphics();


if(!AddingLine)

{

foreach(Line l in Lines)

{

if(l.IsInLine(new Point(e.X,e.Y)))

l.DrawLine(g,Color.Red);

else

l.DrawLine(g,Color.Black);

}

LastPos = new Point(e.X,e.Y);

}

else

{

if(!first)

ControlPaint.DrawReversibleLine(PointToScreen(CurrentLine.StartPoint),
PointToScreen(LastPos), Color.White);

LastPos = new Point(e.X,e.Y);

ControlPaint.DrawReversibleLine(PointToScreen(CurrentLine.StartPoint),
PointToScreen(LastPos), Color.White);

first=false;

}


}


private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)

{

CurrentLine.EndPoint=new Point(e.X,e.Y);

CurrentLine.PenWidth=5;

Lines.Add(CurrentLine);

AddingLine = false;

Invalidate();

}


private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs
e)

{

foreach(Line l in Lines)

l.DrawLine(e.Graphics,Color.Black);

}

private void textBox1_TextChanged(object sender, System.EventArgs e)

{


}

}


public class Line

{

public Point StartPoint;

public Point EndPoint;

public int PenWidth;


public void DrawLine(Graphics g,Color c)

{

Pen p=new Pen(c,PenWidth);

g.DrawLine(p,StartPoint,EndPoint);

p.Dispose();

}

TextBox TTT = new TextBox() ;


//TextBox textBox1 = new TextBox();

public int countx = 0; // = 0; // = 0;



// countx = 0;




public bool IsInLine(Point pnt)

{

Pen p = new Pen(Color.Black,PenWidth);

GraphicsPath pth=new GraphicsPath();

pth.AddLine(StartPoint,EndPoint);

pth.Widen(p);

p.Dispose();

if(pth.IsVisible(pnt))

{

countx = countx+=1;

//textBox1.Text = "count is : " + countx.ToString() ;

//findlines.Line (TTT.Text) = "ddfdfd";

//TextBox TTT;

TTT.Text = "fs" + countx.ToString();


return true;

}

// textBox textBox1 = new TextBox();

return false;

}

}


public class LineArray : CollectionBase

{

public void Add(Line l)

{

List.Add(l);

}


public Line this[int index]

{

get{return (Line)List[index];}

set{List[index]=value;}

}

}

}
 
B

Brad Rogers

Right, see the problem now, outside of class scope, encapsulation, etc

But then it became a challenge to take data from the other class and cause a
textbox to be changed. Tried with delegates, but it wont see outside its
class either, the addressof wouldnt find the method. If its shared?
addressof finds it, but then you cannot change the textbox.

Just an exercise in scope

Brad Rogers said:
Thanks,

here is more of the code, its a drawing program, if I put the breakpoint at
the start of the method, it will break the first time when a line is drawn,
then anytime the mouse is moved over the form area (after its continued)

I will include all the code at the bottom here. I tried "this" but that
doesnt work, I hate to use the excuse of "it works in vb.net" but (it
does). When countx is declared? outside of the method, dont tell me scope
got me also,

public bool IsInLine(Point pnt)

{

Pen p = new Pen(Color.Black,PenWidth);

GraphicsPath pth=new GraphicsPath();

pth.AddLine(StartPoint,EndPoint);

pth.Widen(p);

p.Dispose();

if(pth.IsVisible(pnt))

{

countx = countx+=1;

//textBox1.Text = "count is : " + countx.ToString() ;

//findlines.Line (TTT.Text) = "ddfdfd";

//TextBox TTT;

this.TTT.Text = "fs" + countx.ToString();


return true;

}

// textBox textBox1 = new TextBox();

return false;

}

}

And the entire Form:





using System;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;


namespace findlines

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;


private Line CurrentLine;

private bool AddingLine;

private LineArray Lines=new LineArray();

private Point LastPos;

public System.Windows.Forms.TextBox TTT;

private bool first = true;


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()

{

System.Configuration.AppSettingsReader configurationAppSettings = new
System.Configuration.AppSettingsReader();

this.TTT = new System.Windows.Forms.TextBox();

this.SuspendLayout();

//

// TTT

//

this.TTT.Location = new System.Drawing.Point(104, 16);

this.TTT.Name = "TTT";

this.TTT.Size = new System.Drawing.Size(168, 20);

this.TTT.TabIndex = 0;

this.TTT.Text = ((string)(configurationAppSettings.GetValue("TTT.Text",
typeof(string))));

this.TTT.TextChanged += new System.EventHandler(this.textBox1_TextChanged);

//

// Form1

//

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);

this.BackColor = System.Drawing.Color.White;

this.ClientSize = new System.Drawing.Size(292, 273);

this.Controls.Add(this.TTT);

this.Name = "Form1";

this.Text = "Form1";

this.MouseDown += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseDown);

this.MouseUp += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseUp);

this.Paint += new System.Windows.Forms.PaintEventHandler(this.Form1_Paint);

this.MouseMove += new
System.Windows.Forms.MouseEventHandler(this.Form1_MouseMove);

this.ResumeLayout(false);

}

#endregion


/// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread]

static void Main()

{

Application.Run(new Form1());

}




private void Form1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)

{

CurrentLine = new Line();

CurrentLine.StartPoint=new Point(e.X,e.Y);

AddingLine = true;

}


private void Form1_MouseMove(object sender,
System.Windows.Forms.MouseEventArgs e)

{

Graphics g=CreateGraphics();


if(!AddingLine)

{

foreach(Line l in Lines)

{

if(l.IsInLine(new Point(e.X,e.Y)))

l.DrawLine(g,Color.Red);

else

l.DrawLine(g,Color.Black);

}

LastPos = new Point(e.X,e.Y);

}

else

{

if(!first)

ControlPaint.DrawReversibleLine(PointToScreen(CurrentLine.StartPoint),
PointToScreen(LastPos), Color.White);

LastPos = new Point(e.X,e.Y);

ControlPaint.DrawReversibleLine(PointToScreen(CurrentLine.StartPoint),
PointToScreen(LastPos), Color.White);

first=false;

}


}


private void Form1_MouseUp(object sender,
System.Windows.Forms.MouseEventArgs e)

{

CurrentLine.EndPoint=new Point(e.X,e.Y);

CurrentLine.PenWidth=5;

Lines.Add(CurrentLine);

AddingLine = false;

Invalidate();

}


private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs
e)

{

foreach(Line l in Lines)

l.DrawLine(e.Graphics,Color.Black);

}

private void textBox1_TextChanged(object sender, System.EventArgs e)

{


}

}


public class Line

{

public Point StartPoint;

public Point EndPoint;

public int PenWidth;


public void DrawLine(Graphics g,Color c)

{

Pen p=new Pen(c,PenWidth);

g.DrawLine(p,StartPoint,EndPoint);

p.Dispose();

}

TextBox TTT = new TextBox() ;


//TextBox textBox1 = new TextBox();

public int countx = 0; // = 0; // = 0;



// countx = 0;




public bool IsInLine(Point pnt)

{

Pen p = new Pen(Color.Black,PenWidth);

GraphicsPath pth=new GraphicsPath();

pth.AddLine(StartPoint,EndPoint);

pth.Widen(p);

p.Dispose();

if(pth.IsVisible(pnt))

{

countx = countx+=1;

//textBox1.Text = "count is : " + countx.ToString() ;

//findlines.Line (TTT.Text) = "ddfdfd";

//TextBox TTT;

TTT.Text = "fs" + countx.ToString();


return true;

}

// textBox textBox1 = new TextBox();

return false;

}

}


public class LineArray : CollectionBase

{

public void Add(Line l)

{

List.Add(l);

}


public Line this[int index]

{

get{return (Line)List[index];}

set{List[index]=value;}

}

}

}









Bruce Wood said:
Well, first of all, as you pointed out, C# is case sensitive, so the
keyword is 'this', not 'This'.

Second, are you sure that you're not being bitten by the fact that the
text in the TextBox isn't redrawn until after your method returns to
the O/S? While your code is running, if you change the Text property of
TextBox, the TextBox is simply marked as "dirty" to be redrawn later,
when you're finished doing whatever you're doing. If you are running in
a loop and setting the value of the text box as you go, you won't see
it update until the end.

If the problem is that "countx" isn't being updated properly, then you
didn't show us enough code for us to know why, because we can't see
where countx is declared.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top