Я должен создать сетку свойств «поиска», то есть текстовое поле, расположенное сверху, а затем сетью свойств. Вместо того, чтобы использовать пользовательский элемент управления, я бы расширил сетку свойств напрямую, но я не могу добавить элемент управления текстовым полем «на лету». Кто-нибудь может мне помочь? Большое вам спасибо!C#: как расширить свойствоgrid, чтобы показать текстовое поле наверх
ответ
Поток создания внутреннего контроля PropertyGrid
недокументирован. Он состоит из ToolStrip
, внутренней сетки, панели описания и панели действий.
Я попытался добавить элемент управления в существующую коллекцию: он вызывает проблемы во всем макете управления, который, как представляется, выполняется с помощью внутренних пользовательских вычислений, а не с существующим хорошо известным механизмом компоновки NET.
Возможно, это может быть применено с использованием Reflection, но я даже не пробовал его, потому что это было бы трудно с одной стороны, а с другой стороны, это поставило бы под угрозу восходящую совместимость будущих выпусков PropertyGrid
.
я в конечном итоге с помощью UserControl
, где я положил сверху стыковка TextBox
, с заполнением док PropertyGrid
, и добавил это свойство:
public PropertyGrid InnerPropertyGrid
{
get
{
return this.propertyGrid1;
}
}
По этому пути, все мои PropertyGrid
свойств, методов и событий выставлены, даже в режиме разработки.
Это не самый умный способ сделать это, но это быстрее и легче, чем пытаться взломать некоторые частные части этого элемента управления.
Здравствуйте! это мое фактическое решение. моя надежда состояла в том, чтобы удалить контрольную вложенность, но теперь я думаю, что это слишком дорого! –
Я даже попытался добавить элемент во внутреннюю ToolStrip ... Он принимает кнопку и метку, но не понимает TextBoxToolStripItem ... Это кошмар :) Итак, я придерживаюсь этого, и я в целом счастлив. – Larry
Почему бы не добавить его в начале и просто изменить видимость –
, пожалуйста, не могли бы вы привести мне пример? –
изначально установил 'myTextBox.Visible = false;' затем, когда вы хотите, чтобы он показывался, просто скажите 'myTextBox.Visible = true;' –