Помещение списка поверх других элементов управления - PullRequest
1 голос
/ 16 декабря 2011

Это более ясно на картинке, которую я прикрепил.Окно списка на картинке работает как автозаполнение и показывает предложения пользователю, пока он печатает.проблема в том, что нижняя часть этого списка находится под другими элементами управления, поэтому вы не можете видеть стрелку вниз для вертикальной полосы прокрутки этого списка.Как я могу держать его поверх других элементов управления?

enter image description here

Ответы [ 4 ]

2 голосов
/ 16 декабря 2011

В ListBox указан неверный родительский элемент.Вы не хотите, чтобы сплиттерная панель была родительской, она собирается ее обрезать.Вы не можете легко дать ему правильный родитель с дизайнером.Используйте Вид + (Другие окна) + Структура документа.Перетащите ListBox из панели разделителя в форму.

1 голос
/ 16 декабря 2011

Я думаю, что вы добавляете свой элемент управления ListBox в форму, не совсем правильно. Я предполагаю, что вы добавляете его в том месте, где он отображается, и, таким образом, элемент управления, который перекрывает его, находится внутри какой-то другой части контейнера. Если вы хотите отобразить элемент управления для всех других элементов управления, то этот элемент управления должен быть на всей площади контейнера. Таким образом, вместо того, чтобы быть каким-то дочерним элементом управления вашим контейнером «Karyotype Entry», он должен быть дочерним по отношению к родительскому контейнеру всех трех секций формы.

1 голос
/ 16 декабря 2011

Вы можете поместить ListBox в другую форму и вызывать / показывать форму всякий раз, когда вам нужен список завершения.Это избавит вас от необходимости беспокоиться о том, является ли ListBox самым верхним или нет.

Смысл этого метода в том, что вам придется кодировать форму автозаполнения, чтобы она не крала фокус из основной формы.

Вот код, который поможет вам на тот случай, если вам интересно, как заставить форму показываться без активации (воровство фокуса).

private const int SW_SHOWNOACTIVATE = 4;
private const int HWND_TOPMOST = -1;
private const uint SWP_NOACTIVATE = 0x0010;

[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
static extern bool SetWindowPos(
     int hWnd,           // window handle
     int hWndInsertAfter,    // placement-order handle
     int X,          // horizontal position
     int Y,          // vertical position
     int cx,         // width
     int cy,         // height
     uint uFlags);       // window positioning flags

[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

static void ShowInactiveTopmost(Form frm)
{
     ShowWindow(frm.Handle, SW_SHOWNOACTIVATE);
     SetWindowPos(frm.Handle.ToInt32(), HWND_TOPMOST,
     frm.Left, frm.Top, frm.Width, frm.Height,
     SWP_NOACTIVATE);
}

Вы также можете попробовать переопределить свойство ShowWithoutActivation.

protected override bool ShowWithoutActivation
{
  get { return true; }
}

Примечание: оба фрагмента кода взяты из этого вопроса: Показать форму без кражи фокуса? .

1 голос
/ 16 декабря 2011

Я предполагаю, что ваша картинка не отображается, но вы можете использовать что-то вроде ListBox.BringToFront() или ListBox.SetChildIndex()?Это своего рода вопрос, похожий на этот:

Перенос контроля Winforms на передний план

Я думаю, это не сильно вам поможет, если у вас нет прямого доступахотя в рассматриваемый список ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...