Visual C# button name not changing text - c#

Day 1 coder here:
private void button1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
string firstName;
}
In Visual C# Express, I changed my button name (through properties) from button1 to btnString, but as you can see it is not adapting in the code.
Did I do something wrong ?

private void button1_Click(object sender, EventArgs e)
{
}
This is the event handler, and by changing the control's name it won't automatically change the event handler name (because it was created prior to changing the control's name), you can manually do it though. You can also change it through the properties window, change the tab to "events" instead of the default selected "properties" tab

Changing the button name seemingly hasn't updated the Click event handler.
Either go to the button properties event tab, and update the button1_Click to btnString_Click and the same to the event function, or delete the button1_Click function and double click the button again, so visual studio will generate the correct handler name.

When you change the name of a control, the designer will search your code and replace instances where you have used that variable name, but it will not change the name of event handlers.
Why? What if instead of the "default name" (for a button click it would be <buttonName>_Click) you had your own custom name, like MyCoolEventHandler_Click? The designer would not know how to rename that. The same thing applies if you have coincidentally used a variable name in a totally unrelated function. Would you want it changing the name on you?
You have to do these changes manually. My best advice is to name the controls before you create event handlers. But you can always go into the Properties panel and change the links.

Related

Issue outputting text to textBox (WinForms)

It's my first time using winforms. I'm having some issues.
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void TextBox1_TextChanged(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "FORM1";
textBox1.AppendText("SOME TEXT");
}
}
I've tried this. My textbox is set to fill so it fills up the whole form. I set the multi-line propery to true and dock property to fill.
From what I can try as a first time WinForms user, the Form1_Load should run as soon as the form is created. I've tried some various ways to print text, nothing works. I noticed visual studios says "0 references" next to my function. I'm not sure what this means, maybe part of my issue? Please help.
Having 0 references to method means that it's never used in code. So your issue is that you defined method, which looks like should be executed on form load event, but it's just the definition. I suggest that you copy body of your method to clipboard, go to design page of your form, on the right side, you can browse events, that form generates, find Load event, double-click it, Visual Studio should generate code with empty method definition, paste there your code.
When you right-click your method name and click Find all references you should get something like this at the bottom:
Have you checked following things are done in properties:
Go to Form1->Properties window and check for events.
Now check for Load event and it should be attached to your Form1_Load method.

How to create click events for different text boxes in visual studio 2015

What I know:
In visual Studio 2015 after double-clicking a button, VS will bring the cursor to generated code inside a "button1_click" event.
If a different button is double-clicked, another (completely separate) "button2_click" event is generated.
The same can be said for a TextBox being double-clicked; the user is brought to a generated event for "textbox1_textChanged" or a textbox2_textChanged."
What I want to know:
When clicking textBox1 in form view, accessing its properties, and clicking "events" and double clicking "Click" at the top, the "textbox1_Click" is generated. (This is good)
However, when clicking a SECOND textbox (textbox2), accessing its properties, Events, and double clicking its "Click" event, it brings the cursor to THE SAME EVENT that was generated for textbox1, aptly named "textbox1_Click." (This is not what I want.)
All I ultimately want is:
textbox1_Click {
textbox1.SelectAll();
}
textbox2_Click {
textbox2.SelectAll();
}
How do I create this SECOND click event for my second textbox (textbox2)?
Is it done with an if statement, possibly using sender or e?
Double-clicking the event name (or the object) automatically adds code to the Designer.cs file for your form. That's how the events are linked to their respective controls.
If your two controls are "double-clicking" to the same event handler [and if such behavior is unintentional], fastest fix is to remove the event wire-up from the second control in Designer.cs and double-click the control again.
Look for this line of code:
this.textBox2.Click += new System.EventHandler(this.textBox1_Click);
Which indicates that your second texbox is wired up to the same event as your first one.
void textbox1_Click(object sender, EventArgs e)
{
textbox2.SelectAll();
}
void textbox2_Click(object sender, EventArgs e)
{
textbox2.SelectAll();
}
And in designer
add:
this.textBox1.Click += new System.EventHandler(this.textBox1_Click);
under textbox1
and
this.textBox2.Click += new System.EventHandler(this.textBox2_Click);
under textbox2
Alternatively you can add event handlers in your code. It is useful when you create dynamic controls.

MaskedTextBox.SelectAll on GotFocus doesn't work with mouse

I want to select all the contents of a MaskedTextBox when the clicks (or tabs onto) the control, so they can easily replace the old content. I tried calling SelectAll() in the Enter event, but that didn't work at all.
I switched to using the GotFocus event, which works great when tabbing through controls, but doesn't work when I click on it with the mouse. I would only want to select all the contents when first entering/focusing on the control (subsequent clicks might be used to position the cursor to edit the existing text).
I added a button and tried calling SelectAll() in the button click event, but that didn't do anything either. What's going on? Is this a bug?
How can I get around this?
Steps to reproduce
Create a new Windows Form Application in .NET 4.0 in Visual
Studio 2010.
Add a TextBox, MaskedTextBox, and Button to the default form
Change the Mask property on the MaskedTextBox to "_____".
Add some event handlers:
private void maskedTextBox1_GotFocus(object sender, EventArgs e)
{
Debug.WriteLine("GotFocus");
maskedTextBox1.SelectAll();
}
private void button1_Click(object sender, EventArgs e)
{
Debug.WriteLine("Click");
maskedTextBox1.SelectAll();
}
Run the program, entered some data into the MaskedTextBox, tab through controls back to it. It selects the contents of the MaskedTextBox.
Select the other TextBox. Try clicking on MaskedTextBox. Output shows that GotFocus event was called, but text doesn't get selected.
Try clicking on button in form. Text doesn't get selected.
Tested in Visual Studio 2010 with .NET 4.0 in a Windows Forms Application project
Why this isn't a duplicate of TextBox.SelectAll() does not work with TAB
If you notice, the title says "SelectAll doesn't work with TAB". In my case, it does work with Tab, it doesn't work with the mouse - completely opposite scenario. The answer for that question is to use the GotFocus event. I'm already using the GotFocus event, but it doesn't work. That answer does not answer this question. It is clearly not a duplicate. If I'm wrong, please explain in the comments.
Your SelectAll() is being overwritten by the default functionality of the masked textbox select. I would use the Enter event, it allows for tabbed entry or mouse click entry to the masked text box. You will most likely need to use the BeginInvoke method. Try the code below. It worked for me when I tried...
private void maskedTextBox1_Enter(object sender, EventArgs e)
{
BeginInvoke((Action) delegate { SetMaskedTextBoxSelectAll((MaskedTextBox) sender); });
}
private void SetMaskedTextBoxSelectAll(MaskedTextBox txtbox)
{
txtbox.SelectAll();
}
Executing Focus before Select All worked for me:
private void Masked_Enter(object sender, EventArgs e) {
((MaskedTextBox)sender).Focus();
((MaskedTextBox)sender).SelectAll();
}

Pass name of button to click event

I am generating a number of buttons with similar or identical content and was hoping to use the names they are given to differentiate them. As the program is creating the buttons dynamically I can't create a separate event for them all and instead need to be able to grab the name to be able to know which button triggered the event.
Is there a way to pass through the name of a button to the click event it initiates? the sender object seems to contain the content but not the name.
It is for a event like this:
private void Button_Click(object sender, RoutedEventArgs e)
{
//getname of button
Canvas.Children.Remove(//name of button\\)
}
Far as I know, WPF does not even assign anything to the Name property automatically - that's just for developers to assign so we can reference the control.
However, you should be able to just pass in the sender to the remove method since it accepts a UIElement argument which Button is derived from.
Canvas.Children.Remove((Button)sender);
I'm not familiar with WPF. If this answer appears to be a junk, I'll delete it.
In ASP.Net, we can cast to a button to get the sender's information. Something like this -
private void Button_Click(object sender, RoutedEventArgs e)
{
var button = sender as Button;
button.Name
}
Perhaps getting at the control's name will work for you
private void button1_Click(object sender, RoutedEventArgs e)
{
Control control = (Control)sender;
Canvas.Children.Remove(control.Name);
}

How to call an event handler from one control to the another control?

In Visual C# Form Application, When I Click on the button I want to add to the other controls(like listboxes,labels,textboxes) in same form.
How do I do this?
I have no idea what "to come to the other controls" might mean. But the event handlers in your Form derived class is the switchboard. Implement the button's Click event and have it do whatever you want done with any other controls. A trivial example:
private void button1_Click(object sender, EventArgs e) {
label1.Text = "You clicked the button!";
}
In the form designer, add an event handler to the button's Click event.
The form designer will give you a new method like this; add your code into this method:
private void button_Click(object sender, EventArgs e)
{
// Write some code that uses list boxes, labels, text boxes etc.
}
You question is somewhat unclear, but if you simply want to access other controls on the form, just go ahead and do so:
private void YourButton_Click(object sender, EventArgs e)
{
string someValue = yourTextBox.Text;
// do something with the value
}
If you want to add one event handler to many controls, you can do it.
Just go to properties of control you wish to subscribe, find appropriate event from list (ex: onClick) and choise your existed handler.
But this method will be sutable if events compotable.
Describe your task more detail.

Categories