Произвольные экранные формы

Можно создать экранную форму для решения произвольной задачи. Для этого в проекте модуля создаем новый объект Windows Form и наследуем его от класса CommonForm (из пространства имен Ultima.Client):

public partial class CustomForm : CommonForm

{

 public CustomForm()

 {

         InitializeComponent();

 }

}

Чтобы иметь возможность открыть созданную экранную форму в клиентском приложении, добавляем в ранее созданный класс, унаследованный от класса BaseModule, соответствующую команду:

[Command("{BB8B0BA1-EE2B-4102-BB1C-BA958CA0F303}", "Name", "Descr", "Category")]

public void OpenMyClientModuleForm(object sender, CommandEventArgs args)

{

 new CustomForm().ShowChild();

}

Теперь, используя созданную форму, можно получить, например, информацию о текущем пользователе:

[Import]

private IUserManager UserManager { get; set; }

 

private void simpleButton1_Click(object sender, EventArgs e)

{

 /// Получаем данные о текущем пользователе.

 textEdit1.Text = UserManager.CurrentUserID + ", "

         + UserManager.CurrentUser.RealUserName;

 

 /// Получаем информацию о компьютере пользователя.

 textEdit2.Text = UserManager.CurrentUser.MachineName +

         UserManager.CurrentUser.OsUserName;

}

Example_CustomForm1

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

[Import]

private ITableSource DataContext { get; set; }

 

private void simpleButton2_Click(object sender, EventArgs e)

{

 var id = long.Parse(textEdit3.Text);

 var users =

         from u in DataContext.GetTable<User>()

         where u.ID == (id == null ? 1 : id)

         select u;

 var user = users.Single();

 

 if (user != null)

 {

         memoEdit1.Text = "логин:\t" + user.Login + "\r\n" +

                 "имя:\t" + user.Name + "\r\n" +

                 "язык (ID):\t" + user.LangID + "\r\n" +

                 "заблокирован:\t" + user.IsLocked + "\r\n" +

                 "срок действия пароля истек:\t" + user.IsExpired;

 }

}

Example_CustomForm2