|
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
|
|
|
|
|
Then you have a problem. Potentially you could solve this by having a series of importers, and then using Inversion of Control to load the appropriate one at runtime.
|
|
|
|
|
Hi,
I have this VB6 code to follow and I'm fairly new to C# but I manage to do most things with my COM object in C# that I used to in VB6, but I just can't get my hand around subscription in C# despite googling for days.
I'm trying to do something like this, but no luck.
------------C#---------------
void SubscribeToEvent()
{
g.OnServiceAccessPerformanceUpdate += new INetMonClientObjNotify_OnServiceAccessPerformanceUpdateEventHandler(g_OnServiceAccessPerformanceUpdate);
}
This is the code in VB6 that works...
------------VB6--------------
Private Sub SetServiceAccessSubscription(SiteID As String, IDList() As Long)
On Error Resume Next
Dim VariantIDList As Variant
VariantIDList = IDList
g_NetMonitor.SetServiceAccessSubscription SiteID, VariantIDList
If Err.Number = 0 Then
PrintLine ("Service Access subscription successfully set.")
Else
Err.Clear
PrintLine ("Failed to set Service Access subscription.")
End If
End Sub
-----------------------------
Anyone care to give me some ideas of how to subscribe to the COM object updates?
|
|
|
|
|
Assumming the SetServiceAccessSubscription sub has the same signiture as the INetMonClientObjNotify_OnServiceAccessPerformanceUpdateEventHandler delegate, the code should be more along the lines of:
g.OnServiceAccessPerformanceUpdate += new INetMonClientObjNotify_OnServiceAccessPerformanceUpdateEventHandler(SetServiceAccessSubscription);
Note the change in the ...OnServiceAccessPerformanceUpdateEventHandler parameter from g_OnServiceAccessPerformanceUpdate to SetServiceAccessSubscription.
Hope that helps
"You get that on the big jobs."
|
|
|
|
|
Thanks! Great, half way there...
What would the EventHandler sub look like?
|
|
|
|
|
Don't know but Visual Studio is normally smart enough to autocomplete the statement for you. if you enter
g.OnServiceAccessPerformanceUpdate += Intellisense should automatically display the correct delegate. Hit tab and Intellisense will enter a default name for the subroutine. Hit tab again and a stub with the correct parameters should be created. So normally after you have typed the += symbols, all you need to do is tab, tab.
Hope that makes (intelli) sense
"You get that on the big jobs."
|
|
|
|