Чтобы центрировать ваш InputBox
, вы можете попробовать использовать функции Win32
, чтобы справиться с этим. Этот код работает для вас:
[DllImport("user32")]
private static extern int SetWindowPos(IntPtr hwnd, IntPtr afterHwnd, int x, int y, int cx, int cy, int flag);
[DllImport("user32")]
private static extern IntPtr FindWindow(string className, string caption);
[DllImport("user32")]
private static extern int GetWindowRect(IntPtr hwnd, out RECT rect);
//RECT structure
public struct RECT {
public int left, top, right, bottom;
}
public void ShowCenteredInputBox(string prompt, string title, string defaultReponse){
BeginInvoke((Action)(() => {
while (true) {
IntPtr hwnd = FindWindow(null, title + "\n\n\n");//this is just a trick to identify your InputBox from other window with the same caption
if (hwnd != IntPtr.Zero) {
RECT rect;
GetWindowRect(hwnd, out rect);
int w = rect.right - rect.left;
int h = rect.bottom - rect.top;
int x = Left + (Width - w)/2;
int y = Top + (Height - h)/2;
SetWindowPos(hwnd, IntPtr.Zero, x, y, w, h, 0x40);//SWP_SHOWWINDOW = 0x40
break;
}
};
}));
Microsoft.VisualBasic.Interaction.InputBox(prompt, title + "\n\n\n", defaultResponse,0,0);
}
Конечно, вы можете также изменить положение кнопки, метки и TextBox на вашем InputBox
но это очень противно и сложно, можно сказать, что это не просто. Рекомендуемое решение для вас: создать новую стандартную форму в System.Windows.Forms.Form
, добавить в нее элементы управления и использовать метод ShowDialog()
, чтобы показать вашу форму.. Конечно, для этого требуется больше кода, но он позволяет полностью настроить внешний вид и поведение.
Создайте свою собственную форму и разместите 'TextBox',' Label' и 'Buttons', как хотите. Затем вы всегда можете вызывать его в каждой форме как «inputForm.StartPosition = FormStartPosition.CenterParent;», а затем 'inputForm.ShowDialog (this);' – Fabio