2015-05-23 5 views
2

Я пытаюсь перевести этот код VB.NET на C#, но я новичок в C#.Как перевести этот код VB.NET на C#?

Это мой код VB.NET код:

Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (_ 
     ByVal hwnd As Integer, _ 
     ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, _ 
     ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer 

Private Const SWP_NOSIZE As Integer = &H1 
Private Const SWP_NOMOVE As Integer = &H2 

Private Shared ReadOnly HWND_TOPMOST As New IntPtr(-1) 
Private Shared ReadOnly HWND_NOTOPMOST As New IntPtr(-2) 
Private windows As New WindowInteropHelper(Me) 

Public Function MakeTopMost() 
    SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE) 
End Function 

И это мой C# Код:

[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
public static extern IntPtr SetWindowPos(string hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 

private const int SWP_NOSIZE = 0x1; 
private const int SWP_NOMOVE = 0x2; 


public void MakeTopMost() 
{ 
    SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 
} 

Error in MakeTopMost(): invalid Arguments

ScreenShot

+0

Вам не нужно использовать '0x1' вместо' & H1' в C#? –

+0

Шестигранная константа в C# записывается как 0x1; – Steve

+0

O это работает спасибо, только мне нужно перевести функцию MakeTopMost(), или «я думаю, это плохо» – grijalvaromero

ответ

2
[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
    public static extern IntPtr SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 

    private const int SWP_NOSIZE = 0x1; 
    private const int SWP_NOMOVE = 0x2; 
    private static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
    private static readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); 
    private WindowInteropHelper windows = new WindowInteropHelper(this); 

    public void MakeTopMost() 
    { 
     SetWindowPos(windows.Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 
    } 

Не должно быть никаких ошибок.

+0

Спасибо: D, но моя функция объявления SetWindowPos Lib правильно в моем коде C#? – grijalvaromero

+0

Попробуйте мой обновленный ответ – Muhammad

+0

Я пытаюсь с вашим кодом, но функция SetWindowPos не распознается – grijalvaromero

1

шестнадцатеричные номера начинаются с 0x:

private const int SWP_NOSIZE = 0x1; 
private const int SWP_NOMOVE = 0x2; 
+0

o эта работа, но mi проблема в функции MakeTopMos(): Ошибка: оператор '||' не может применяться к операнду типа 'int' – grijalvaromero

+0

| является побитовым или оператором в C#. – Aladdin

+0

да у меня это: D, но моя функция объявления SetWindowPos Lib правильно в моем коде C#? потому что у меня есть ошибка – grijalvaromero

0

Для функции MakeTopMost() вам нужно использовать сингл | а не два, поскольку два переводят на «OrAlso», которые могут использоваться только в условном выражении. Вот заполненный код (как отражено в комментариях)

[DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
private const int SWP_NOSIZE = 0x1; 
private const int SWP_NOMOVE = 0x2; 
private readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
private readonly IntPtr HWND_NOTOPMOST = new IntPtr(-2); 
private WindowInteropHelper windows = new WindowInteropHelper(this); 

public static extern IntPtr SetWindowPos(string hWnd, IntPtr hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 

public void MakeTopMost() 
{ 
    SetWindowPos(windows.handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 
} 
+0

Спасибо: D, но моя функция объявления SetWindowPos Lib правильно в моем коде C#? потому что у меня есть ошибка – grijalvaromero

+0

с | вы не должны получать ошибку, теперь это другая ошибка? –

+0

Да, у меня есть ошибка в аргументах SetWindowPos Invalids: C – grijalvaromero

Смежные вопросы