2016-06-08 16 views
0

Ich habe mein Gehirn wurde Abstich versuchen, herauszufinden, wie man diesen VB-CodeVerwenden eines Formularhandle für einen Fall in einer Switch-Anweisung?

Case frm.hwnd: 

in C# zu schreiben, so dass es in einer switch-Anweisung mit einem langen als einen Testausdruck zu arbeiten. Wenn ich versuche

case (long)frm.Handle: 

meine IDE sagt mir, dass ich einen konstanten Ausdruck verwenden muss. Ich habe versucht, sowohl die Form Griff in einen langen Gießen und es auf einen konstanten lange variable

const long frmHandle = new (long)frm.Handle; 

und Instanziieren eines IntPtr Objekt Zuordnung in eine long zu werfen, wenn ich es als ein Fall Ausdruck verwenden.

const IntPtr frmHandle = new IntPtr(frm.Handle); 

Erstere einen Fehler verursacht

der Wert zugewiesen wird sagen

konstant sein muss

und diese verursacht eine Fehlermeldung,

IntPtr kann nicht als deklariert werden Konstante

Gibt es eine Möglichkeit, das Form-Handle weiterhin als Fall zu verwenden?

Antwort

0

Ich denke, muss man dies eine "if" für verwenden:

if(variable == frm.Handle) 

Ein Schaltergehäuse ist ein einfach besser ;-) wenn sonst suchen

+0

Ich bin überrascht, dass ich diese Lösung nicht direkt in das Gesicht starrte. –

2

Die switch-Anweisung wird mit Konstantenausdrücken (zur Kompilierzeit) verwendet, nicht mit Variablen. Sie können keinen Fenstergriff mit einem verwenden.

const IntPtr frmHandle = new IntPtr(frm.Handle); 

frmHandle ist keine Kompilierzeitkonstante. Diese Syntax besagt, dass sie nach der Initialisierung nicht geändert werden kann.

Sie können das gleiche erreichen, aber mit einer Variablen, mit einer Reihe von if Aussagen. Abhängig von Ihren tatsächlichen Bedürfnissen können Sie auch ein Wörterbuch verwenden, das den Fenstergriff als Schlüssel verwendet (der Wert hängt davon ab, was Sie hier erreichen möchten).

+0

+1 VB 'Select Case' hat einige Ähnlichkeiten mit C# 'switch' aber auch einigen wichtigen Unterschieden. In VB kann der Fallwert ein Laufzeitausdruck sein, aber in C# muss er zur Kompilierungszeit ausgewertet werden. – MarkJ