#c# #winforms #user-controls #custom-controls
#c# #winforms #пользовательские элементы управления #пользовательские элементы управления
Вопрос:
Я создал форму, которая эмулирует a FolderBrowseDialog
, но с некоторыми дополнительными функциями, которые я хотел. Он протестирован и работает, поэтому теперь я хочу превратить его в элемент управления. Моя проблема в том, что, как только я наследую from UserControl
вместо Form
, у меня больше нет Close()
метода, и у меня больше нет FormClosing
события. Когда я нажимаю кнопку «ОК» или «Отмена», как мне закрыть форму и вернуть управление вызывающему объекту?
Ответ №1:
Чтобы сделать его многоразовым компонентом, вместо того, чтобы пытаться получить его из Control
, создайте Component
, который использует эту форму. Таким образом, он может отображаться в toolbox, и вы можете поместить экземпляр вашего компонента в design surface, как и другие компоненты.
Ваш компонент должен содержать некоторые свойства, которые вы хотите отобразить из диалогового окна, также содержать ShowDialog
метод, который создал вашу форму, используя некоторые свойства (например, заголовок, начальный каталог), а также показывает вашу пользовательскую форму как диалоговое окно и устанавливает некоторые свойства (например, выбранную папку) и возвращает результат диалога. Например:
using System.ComponentModel;
using System.Windows.Forms;
public partial class MyFolderBrowser : Component
{
public string Text { get; set; }
public string SelectcedFolder { get; set; }
public DialogResult ShowDialog()
{
using (var f = new YourCustomForm() { Text = this.Text })
{
var result = f.ShowDialog();
if (result == DialogResult.OK)
SelectcedFolder = f.SelectedFolder;
return resu<
}
}
}
Комментарии:
1. Спасибо, это работает. Тем не менее, я нашел альтернативное решение. Я создал библиотеку классов, а затем заменил токен class.cs, который создается с помощью классов моей формы, а затем просто изменил пространство имен. Это работает, но мне больше нравится ваше решение. Это немного чище.
2. Если вы не создаете компонент, вы не сможете использовать его во время разработки, и вы должны использовать его только в коде. Но создание компонента позволяет вам поместить его экземпляр в вашу форму, как настоящий компонент браузера папок, таймер и так далее.