|
A singe event with an if statement should solve your purpose. Why do you need two events?
private void button1_click(object sender, EvenArgs e) {
if (button1.Text == "Start") {
button1.Text = "Stop";
} else {
button1.Text = "Start";
}
}
I am assuming that you're doing the job in a different thread or a BackgroundWorker .
|
|
|
|
|
I was thinking the same.Write two methods and handle it in that single event click.
|
|
|
|
|
As an aside (ish):
Please please please don't use the button text to work out what state you're in, use something like a boolean member variable instead (or, if you absolutly must use a property on the button, something like the Tag property). The code snippet you've given will break as soon as you try to localise your application, and just really isn't good practice.
Something like:
private bool started = false;
private void button1_click(object sender, EventArgs e) {
if (!started) {
button1.Text = "Stop";
started = true;
}
else {
button1.Text = "Start";
started = false;
}
}
Also, if you're working in a different thread, don't forget cross-thread access issues.
|
|
|
|
|
I know that Tony, I was just giving him a heads up on where to start. His question was very basic and I did not want to confuse him with the specifics. Anyway, thanks for the tip.
|
|
|
|
|
If you're going to use the localisation argument then surely you should set the button text to resource strings
I like to use Tag for this, unless I am already using it for something else, as it really is a property of the button and should be stored with it.
Of course in most cases the button is controlling the state of some business object and you should check that instead:
private Task someBigJob;
private void button1_click(object sender, EventArgs e) {
if (someBigJob == null || !someBigJob.Running) {
button1.Text = "Stop";
someBigJob.Start();
}
else {
button1.Text = "Start";
someBigJob.Stop();
}
}
(for the benefit of the OP, I'm sure you know already!)
|
|
|
|
|
I've done that, I won't do it again; I'd create two Buttons but have only one visible at a time.
|
|
|
|
|
Can you tell us why ?
...and I have extensive experience writing computer code, including OIC, BTW, BRB, IMHO, LMAO, ROFL, TTYL.....
|
|
|
|
|
Wayne Gaylard wrote: Can you tell us why ?
Because its just a better way of doing it.
Because it avoids the previously mentioned problem of using the button's text to determine what to do, with all the inherant problems associated with using this method.
Because the 2 buttons do a different job and therefore should not be the same button (separation of concern)
I could go on.
|
|
|
|
|
Now this is an interesting thread. I don't agree with you that it's a better way to do it, because it comes with other problems (you have to manually place two buttons in the same place, make them the same size, tab order and keyboard mnemonic, etc).
If you want to have it look like one button, then make it one button. (Of course a Start and Stop button next to each other is also acceptable.)
I would say that the button does one single job: it toggles the state of the underlying thing that is being started or stopped. Logically, one might make it a check box, but users don't expect that.
|
|
|
|
|
J4amieC wrote: Because its just a better way of doing it.
It's just a different way of doing it. There's this thing called a ToggleButton[^].
I wouldn't use a button, but a checkbox. Makes it clear to the user that there are two different states, and that it toggles.
J4amieC wrote: Because the 2 buttons do a different job and therefore should not be the same button (separation of concern)
If they're calling the same method, one with a boolean "true" and the other with "false"? The world isn't that black-and-white.
Bastard Programmer from Hell
|
|
|
|
|
I could, but J4amieC did a good enough job.
|
|
|
|
|
thank you
solve my problem with this:
If (txtstart.text="OK")
{
do somthing
}
else if (txtstart.text="Stop")
{
application.close();
}
|
|
|
|
|
That's bogus.
|
|
|
|
|
I tried to find it, but Google today doesn't like and doesn't want to tell me this.
I have an enum:
[Flags]
enum EnumName
{
None = 0,
Value1 = 1,
Value2 = 1 << 1,
Value3 = 1 << 2,
Value4 = 1 << 3,
Values13 = Value1 | Value3,
Values24 = Value2 | Value4
}
How can I extract from this enum values that are "simple values"... I want to get collection, array, whatever, that will store values:
None
Value1
Value2
Value3
Value4
I have a couple of enums like this, so "just create a list of those values" isn't good. Also this list is a subject of changes, so I want it to be done automatically after compilation.
Don't forget to rate answer, that helped you. It will allow other people find their answers faster.
|
|
|
|
|
You should use the static Enum.GetValues method. It retrieves an array of the names of the constants in a specified enumeration. In your case:
var names = Enum.GetNames(typeof(EnumName));
If you need to get the names as well as their values, use Enum.GetValues .
I hope this helps.
2A
|
|
|
|
|
Yeah. I know this. But I want to filter out values that are combination of two or more other values in the enum. So when I have:
Value13 = Value1 | Value3
I want it to be filtered out.
Don't forget to rate answer, that helped you. It will allow other people find their answers faster.
|
|
|
|
|
In this particular case you need only values that evaluate to a power of 2, so you can do something like this:
List<EnumName> filtered = new List<EnumName>();
foreach (EnumName val in Enum.GetValues(typeof(EnumName)))
{
if ((val & (val - 1)) == 0)
filtered.Add(val);
}
Now filtered will hold all EnumName values except Value13 and Value24 (Which are not powers of 2).
2A
|
|
|
|
|
Great. Didn't thought of this. Thanks.
Don't forget to rate answer, that helped you. It will allow other people find their answers faster.
|
|
|
|
|
[ADDED] Half of this message is wrong, see the replies.[/ADDED]
FYI: the presence of Value13 and Value24 makes your usage of [Flags] inappropriate, see the "guidelines" in MSDN[^]. ]Flags] expects all values to be "bitwise non-overlapping" so if A and B are values, A|B should differ from A as well as from B, which your set does not satisfy. However the compiler does not check this. AFAIK the only implication is on how ToString() will operate.
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
modified on Friday, May 20, 2011 8:03 AM
|
|
|
|
|
Maybe I'm to tired, but I don't see how does it brakes those guidelines. I have Value1 , Value2 , Value3 and Value4 as my enumeration values, and for "commonly used flag combinations" I have:
Value13 , that means Value1 OR Value3
and
Value24 , that means Value2 OR Value4
Value13 and Value24 mean "Value 1 or 3", "Value 2 or 4", not "Value 13", "Value 24". Obviously, this enum is just an example and in my real code it's more meaningful.
Don't forget to rate answer, that helped you. It will allow other people find their answers faster.
|
|
|
|
|
Sorry, you are right, I misunderstood what was written there. Having bit combinations defined in a [Flags] enum is perfectly valid (which explains why I never got a compiler message when I accidentally did what I thought was not allowed).
Here is an example of how [Flags] interacts with ToString():
enum Numbers {
Zero=0, One=1, Two=2, Three=3, Four=4, Five=5
}
[Flags]
enum Flags {
Zero=0, One=1, Two=2, Three=3, Four=4, Five=5
}
public override void Test(int arg) {
for (int i=0; i<8; i++) log("Numbers."+i+"="+(Numbers)i);
for (int i=0; i<8; i++) log("Flags."+i+"="+(Flags)i);
}
which yields:
13:53:36.826 CPTest.log-59 Numbers.0=Zero
13:53:36.835 CPTest.log-59 Numbers.1=One
13:53:36.846 CPTest.log-59 Numbers.2=Two
13:53:36.862 CPTest.log-59 Numbers.3=Three
13:53:36.874 CPTest.log-59 Numbers.4=Four
13:53:36.884 CPTest.log-59 Numbers.5=Five
13:53:36.896 CPTest.log-59 Numbers.6=6
13:53:36.906 CPTest.log-59 Numbers.7=7
13:53:36.915 CPTest.log-59 Flags.0=Zero
13:53:36.925 CPTest.log-59 Flags.1=One
13:53:36.934 CPTest.log-59 Flags.2=Two
13:53:36.943 CPTest.log-59 Flags.3=Three
13:53:36.951 CPTest.log-59 Flags.4=Four
13:53:36.960 CPTest.log-59 Flags.5=Five
13:53:36.968 CPTest.log-59 Flags.6=Two, Four
13:53:36.977 CPTest.log-59 Flags.7=Two, Five
Luc Pattyn [Forum Guidelines] [My Articles] Nil Volentibus Arduum
Please use <PRE> tags for code snippets, they preserve indentation, improve readability, and make me actually look at the code.
|
|
|
|
|
Good call
2A
|
|
|
|
|
Hi
I want help to import slides of ppt but from different veresion (2003,2007)
I think the reference change of microsoft I can add many reference to one program
or what to display any ppt form any version pleeeeese Help
Thanks
|
|
|
|
|
The object model changes between versions. Later versions should be able to import older versions though.
|
|
|
|
|
Coz some one not have new version and if instull our program not work there
|
|
|
|
|