2010-01-15 13 views
6

¿Cómo puedo convertir esta pieza de código VB6 en C#?C# & VB6: ¿Cómo convertir la declaración 'con' a C#?

http://pastebin.com/f16e19351

que he probado en mi cuenta y tengo hasta ahora a:

http://pastebin.com/f7ca199f0

EDIT: código que estoy tratando de traducir existe aquí: http://www.codeproject.com/KB/vb-interop/MouseHunter.aspx

+0

Posible duplicado de [C# equivalente para la palabra clave de Visual Basic: 'Con' ... 'End With'?] (Http://stackoverflow.com/questions/4174773/c-sharp-equivalent-for-visual-basic -keyword-with-end-with) – DaveInCaz

+0

@DaveInCaz ¿Quizás presente el otro como duplicado, ya que esta pregunta fue hecha antes de esa? – Zolomon

Respuesta

7

No ha mostrado el código EventThief, lo que hace que sea imposible saberlo realmente. Pero, en general:

With expression 
    .Foo = a 
    .Bar = b 
End With 

se traduciría en

var x = expression; 
x.Foo = a; 
x.Bar = b; 

(Por supuesto, puede especificar el tipo de forma explícita ...)

Lo común es que expression sólo se evalúa una vez. En el código particular que mostró, no hay necesidad de una variable adicional, por supuesto, ya que la expresión es solo la variable local en primer lugar.

Su error real parece que solo tiene que ver con los tipos de EventThief.RIGHT_DOWN etc. en lugar de con la declaración WITH.

EDIT: Bueno, ahora que ha mostrado el código EventThief original que hace Booleanos uso ... pero no ha demostrado su portadoEventThief código. Usted escribió:

Dice et.LEFT_UP es un corto

... pero no debe ser. En el original es Boolean, entonces ¿por qué es un short en su puerto?

+0

Agregué un enlace en mi pregunta, mire la edición. Solo busca "eventthief" y lo encontrarás. – Zolomon

+0

No sé por qué es corto, yo uso tlbimp como se menciona aquí: http://www.csharp-station.com/Articles/CSharpAndActiveXDlls.aspx para permitir que el dll ActiveX se use en .NET y lo tomo que lo convirtió en un corto en su lugar o algo? Trataré de convertir manualmente todo a C#. ¡Gracias por la ayuda! – Zolomon

0

Hay no es equivalente a With in C# hasta donde yo sé y necesita enumerar explícitamente el objeto cuando se lo refiere a sus funciones/propiedades de miembro.

0

No hay equivalente en C#.

2

Al igual que

With EventStealingInfo 
    .RIGHT_DOWN = True 
    .RIGHT_UP = True 
End With 

convierte

EventStealingInfo.RIGHT_DOWN = true; 
EventStealingInfo.RIGHT_UP = true; 
0

¿No puedes cambiar el tipo de la LEFT_UP ser un bool?

Al mirar su código y la forma en que utiliza EventThief, es posible que desee utilizar una enumeración de indicadores para poder establecer bits individuales y luego hacer comparaciones bit a bit.

+0

Tendré que buscarlo. ¡Gracias! – Zolomon

3

No estoy muy seguro pero creo que el siguiente en VB

With EventStealingInfo 
    .RIGHT_DOWN = True 
    .RIGHT_UP = True 
End With 

puede traducirse más o menos a

var EventStealingInfo = new EventThief(){ 
    RIGHT_DOWN = true, 
    RIGHT_UP = true 
}; 

donde RIGHT_UPRIGHT_DOWN y son bienes de dominio público de la clase EventStealingInfo.

Este constructo en C# se conoce como Object Initializer.

+0

@stakx: Gracias por señalar eso. – missingfaktor

0

La palabra clave "con" es solo un atajo para guardar la reescritura del nombre de la variable cuando se configuran varias propiedades. No hay equivalente en C#.

Incluso si hubiera todavía un problema, aparentemente intenta asignar un booleano a un tipo de datos corto.

¿Qué hay en la clase EventThief? ¿Puedes simplemente hacer que los campos LEFT_UP sean booleanos?

+0

Mira el enlace en la edición en mi pregunta, busca "EventThief" y lo encontrarás. – Zolomon

+0

En realidad, también almacena en caché la referencia del objeto, lo que puede ahorrar tiempo si el objeto en cuestión debe resolverse persiguiendo una serie de propiedades anidadas o, peor aún, una llamada a método que crea una instancia para uso temporal. Por supuesto, también puede caché manualmente creando primero una nueva variable de referencia temporal y usándola. – Bob77

1

creo que es más cerca se puede ir:

EventThief EventStealingInfo = new EventThief() 
{ 
    RIGHT_DOWN = true, 
    RIGHT_UP = true 
}; 
+0

Me gustaría ir con esta respuesta (excepto que realmente debería decir '... = new EventThief()'). Los inicializadores de objetos son probablemente lo más parecido a la declaración 'With' de Visual Basic. – stakx

+0

ops, solucionado eso, ty –

1

¿Puedo llamar a su opción propuesta Un.

  1. Tome la comunidad VB6 code que crea una DLL para tratar con los ganchos de Windows.
  2. traducir eso a C#

¿Puedo sugerir Opción B y la Opción C, que creo que va a ser más fácil?

Opción B
1. Comienza con Microsoft's C# code para tratar con ganchos de Windows.
2. Adapte según sea necesario, mirando lo que API llama al VB6 code makes.

Opción C
1. Tomar la construcción de VB6 DLL de la community code.
2. Llame a esa DLL desde su nueva aplicación C# a través del Interop.

+0

Probé la opción 2 primero, luego probé la opción 3 cuando la primera falló. Fue entonces cuando me encontré con el error con el tipo incorrecto en la estructura EventThief, así que probé la opción 1 y encontré otro error que decía algo acerca de que el GUID estaba equivocado y me perdí en qué hacer. – Zolomon