|
Cannot, or it doesn't happen? Or... if it could not happen, then why, instead of just... cannot happen.
Try it. Just as I described on my previous post. Create a new project, with a form, and type that out...
Even I did this, to prove myself I wasn't fooling anyone; so I am not freaking ommiting anything... sheesh...
This happens because when you add code like that, in runtime, the compiler will hold to the references and not to the values; the result is that both will grab the last value of the reference. That's why it won't happen if you switch the text variable to inside the if, or if you added static text like MessageBox( "closed" );.
Advice... do try it first, before saying it CANNOT happen. I won't hold a grudge on you if you try, I promise...
Cheers
Gonçalo A.
|
|
|
|
|
I ignored your last code post because it's not the same as your original post.
if (true)
...
if (true)
...
is NOT the same as:
if (something)
...
if (something_else)
...
Your last code post is identical in output to:
string text;
if (true)
{
text = "closed";
FormClosed += delegate( object sender, FormClosedEventArgs e )
{ MessageBox.Show( text ); };
text = "closing";
FormClosing += delegate( object sender, FormClosingEventArgs e )
{ MessageBox.Show( text ); };
}
The problem was never in the compiler, but in your logic.
|
|
|
|
|
You don't even need to put the if there...
Now... all this not to answer my question?? Come one... you can do better than that, can't you? If I said that it wasn't relevant, it's because it wasn't... Now... you can remove the if... are you gonna answer my question or are you just gonna pretend you're so very awesome?
Cheers
Gonçalo A.
|
|
|
|
|
Kensho wrote: Come one... you can do better than that, can't you? If I said that it wasn't relevant, it's because it wasn't
That's what YOU think. It WAS relevant. The key piece of information was, and still is, missing. I already explained to why that's the case, but you keep insisting that it's not. It's not me that has the problem, it's you. The first rule of asking a question is to listen.
Kensho wrote: Now... you can remove the if... are you gonna answer my question or are you just gonna pretend you're so very awesome?
I already answered this in my previous post. Sure, you can remove the if. Your code would still be this:
string text;
text = "closed";
FormClosed += delegate( object sender, FormClosedEventArgs e )
{ MessageBox.Show( text ); };
text = "closing";
FormClosing += delegate( object sender, FormClosingEventArgs e )
{ MessageBox.Show( text ); };
Perhaps you're misunderstanding what the two delegate statements are doing??
|
|
|
|
|
Kensho wrote: Come one... you can do better than that, can't you? If I said that it wasn't relevant, it's because it wasn't
That's what YOU think. It WAS relevant. The key piece of information was, and still is, missing. I already explained to why that's the case, but you keep insisting that it's not. It's not me that has the problem, it's you. The first rule of asking a question is to listen.
Kensho wrote: Now... you can remove the if... are you gonna answer my question or are you just gonna pretend you're so very awesome?
I already answered this in my previous post. Sure, you can remove the if. Your code would still be this:
string text;
text = "closed";
FormClosed += delegate( object sender, FormClosedEventArgs e )
{ MessageBox.Show( text ); };
text = "closing";
FormClosing += delegate( object sender, FormClosingEventArgs e )
{ MessageBox.Show( text ); };
Perhaps you're misunderstanding what the two delegate statements are doing??
|
|
|
|
|
If the code does the same, it WAS IRRELEVANT; if it was relevant, the code would do something different.
I'll just state the output of that code...
When you close the form, two message boxes will appear...
One will say "closing", and the other one will say "closing".
I said this right from the start.
Gonçalo A.
|
|
|
|
|
if (true){
text = "closed";
FormClosed += delegate( object sender, FormClosedEventArgs e )
{ MessageBox.Show( text ); };
text = "closing";
FormClosing += delegate( object sender, FormClosingEventArgs e )
{ MessageBox.Show( text ); };
}
So you mean to tell me that you thought text in each delegate would get a copy of the current contents of the text variable when the delegates were created??
You'll have to excuse me as I (wrongly) assumed you knew how variables worked. This was such a basic concept you were missing that I didn't even consider it a possibility that that's where you were misunderstanding the code. To me, it was obvious this would be the behavior. I originally thought that you were wondering why both sections of code were being run because both if statements were being evaluated to true .
|
|
|
|
|
bwahahahahaha I really had to laugh on this one...
And you're a Microsoft MVP??? Well... you're from VB, so... I guess I have to understand.
First... it's not a variable matter. It's a closures matter. And I said from the start what would happen; you were the one saying otherwise... so... don't try to cover up your stupidity now...
And... weren't you supposed to be here to help? Get over your frustration, it's unhealthy for this forum users.
Cheers
Gonçalo A.
|
|
|
|
|
|
In lack of a wiser answer... I don't mind...
Cheers
Gonçalo A.
|
|
|
|
|
Why not just send the strings directly, without assigning to a variable?
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Skippums wrote: Why not just send the strings directly, without assigning to a variable?
ahahahahahah
that's right, that would solve it.
But that example is just an illustration of my problem. The actual code gets the contents from somewhere else dynamically, and it doesn't display a message box, it does something else... this was just to simplify. I actually solved this by moving the value holder inside the context, and this way, a new reference is always created.
Gonçalo A.
|
|
|
|
|
Kensho wrote: The actual code gets the contents from somewhere else dynamically...this was just to simplify
Exactly... that is why Dave asked you for more specific code. Clearly, you would have thought of this if it solved your problem; however, in your example this is a valid solution. Try to be slightly more specific in your problem statement so we can give "real" feedback instead of having to guess what the problem is. Glad you got it working,
Sounds like somebody's got a case of the Mondays
-Jeff
|
|
|
|
|
Ok... the thing is... I had solved it since I posted the first message here.. I said it even... I only spoke about the positioning of the variable and the association to runtime delegate.
This is que only thing that I questioned:
Kensho wrote: Now... can anyone explain me why does this happen? The delegate uses the reference instead of the value?
delegate... value... I don't understand why the big fuss over a simple question.
But nevermind... I already got my answer... maybe someone can pick this up and find it useful, as a simple piece of information, as it is.
Cheers
Gonçalo A.
|
|
|
|
|
One word : closures. A closure captures the value of a variable in its lexical scope.
Your event handlers are anonymous functions which capture the local variable text . Behind the scenes, the compiler generates a new class with the captured variable as a member and rewires the event handler so that it calls a method on the generated class. That class then uses the member variable's value to fill in for the captured variable.
The compiler updates the generated class instances with the value of captured variables as long as the captured variables are in scope. In your case, text was declared outside the scope of both if blocks, so the compiler dutifully updated the value of the variable when you changed it inside the second if block.
Just to make things clear, this is not done only for reference types (like string).
delegate void Func();
static void Main()
{
Func[] f = new Func[10];
for (int i = 0; i < 10; ++i)
{
f[i] = delegate { Console.WriteLine(i); };
}
foreach (Func func in f)
{
func();
}
}
This will print 10 all ten times.
|
|
|
|
|
Exactly!
Now that's an answer. Thank you.
Cheers
Gonçalo A.
|
|
|
|
|
hi frein i multiple text boxes in my form and i want tpo highLight Text box when tab Control reach to specific Text Box but when Tab Control Leaves it come back to its Orignal Place
how can i do that
wasim khan
|
|
|
|
|
Do you want to?:
1. Highlight the text that is currently in the text box as the user enters the control.
2. Set the background color of the text box as the user enters\exits the control.
If the answer is 1:
Handle the Enter event for the textbox and then call textbox.SelectAll();
If the answer is 2:
Handle the Enter event for the textbox and set the textboxes Appearance.BackColor property.
Handle the Leave event and set this same property back to its original value.
If its neither then you will need to explain again what you were asking.
I hope this helps.
|
|
|
|
|
you can use Textbox.Focus() methods and Textbox Leave Events and Changes the background color according it !!!
|
|
|
|
|
Hi all,
This is my first C# application. Here what I going to do.
Read a text file and display them in a list view. Simply as line by line. I can read the file and get line by line there easily. My question is how to display them.
Any tutorial you guys know that I can get a better start.
I appreciate your help all the time...
Eranga
|
|
|
|
|
listviewControl.Items.Add("string from file");
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios[ ^]
|
|
|
|
|
Yes I do,
But I have one question now. I read a file and found those lines to put into list view. A line consist of four words and in between each word there is a tab character. For tabs, on list view display some annoying characters. I put a message box and test at the time I got the line of text. It's ok, no printed and tabs.
How can I avoid it.
I appreciate your help all the time...
Eranga
|
|
|
|
|
value.Replace('\t',' ');
This replaces all occurences of tabs with a space.
Regards,
Thomas Stockwell
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Visit my homepage Oracle Studios[ ^]
|
|
|
|
|
Thanks, but what I have done is that, use tab as a delimiter and get substring from the original string.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Hi Friends,
I have developed a Windows service. Now i need icon for this service in
systray and context menu for this icon.
I have added context menu for notify icon but context menu not displaying in systray.
Please let me know how to do this?
With regards,
Dharani.
|
|
|
|