Должен ли я использовать пользовательский элемент управления? - PullRequest
0 голосов
/ 20 июня 2011

Итак, в основном я хочу попытаться создать простую форму, в которую пользователь может ввести информацию для входа (для входа в базу данных mysql. Затем программа запросит базу данных, отобразит информацию и пользователя. может сделать некоторые манипуляции.

Чего я хочу избежать, так это наличия множества всплывающих оконных форм (одна для входа в систему, другая для выбора запроса к базе данных и т. Д.) ...

Итак, то, что я думал, было в моей основной форме, со встроенными в него «подформами». Я читал об этом и обнаружил, что большинство людей сказали, что лучше вкладывать пользовательские элементы управления в формы, чем в другие формы.

Просто чтобы вы могли видеть, о чем я говорю, это ОЧЕНЬ основной скелет того, как я хочу, чтобы он выглядел:

enter image description here

Как видите, очень просто, вместо того, чтобы иметь все всплывающие окна, встраивать пользовательский ввод в правую часть формы

Так, действительно ли я должен использовать пользовательские элементы управления для этого?

Если это так, у меня возникают некоторые проблемы с возвратом значений в основную форму из пользовательского элемента управления (потому что нет никакого метода showDialog () или диалоговое окно результатов из пользовательских элементов управления, поэтому я не знаю, когда пользователь ввел все их данные для входа на сервер sql, например.)

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

В любом случае, если я должен использовать здесь userControl против userForm, как мне получить ввод пользователя обратно в основную форму ??

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Используйте Panel.

Шаблон, который я обычно использую для передачи информации обратно в основную форму, - это создание подклассов Panel для моего встроенного содержимого и создание свойств в этом подклассе для каждого извещи, которые я хочу передать обратно в мою основную форму.

Пример:

public class LoginPanel : Panel
{
    public string Username { get; set;}
    ...
}

Если я хочу стать модным и делать такие вещи, как автоматически, проверьте, действителен ли хост илиучетные данные будут аутентифицироваться. Я мог бы также добавить событие Changed к Panel, которое срабатывает всякий раз, когда происходит изменение содержимого любого из входных данных, которые он содержит.Затем я бы добавил обработчик для этого события в мою основную форму.

Если вы хотите по-настоящему поумнеть (я бы сделал это, если собирался создать пользовательский элемент управления многократного использования), вы можете выполнить все подключения иАутентификация в вашем подклассе, имеет только свойство SqlConnection и запускает событие Connected.

Примерно так:

public class LoginPanel : Panel
{
    // A property returning a valid connection when
    // connected, null otherwise.
    public SqlConnection connection { get; set;}
    ...

    // An event that clients can use to be notified whenever 
    // a connection is made.
    public event EventHandler Connected;

    // Invoke the Connected event; called whenever a successful 
    // connection is made
    protected virtual void OnConnected(EventArgs e) 
    {
       if (Connected!= null)
          Connected(this, e);
    }
}
1 голос
/ 20 июня 2011

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

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

Я оставлю часть вопроса с практическими рекомендациями другому человеку.

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