Form. Load Событие
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Происходит до первоначального отображения формы.
public: event EventHandler ^ Load;
public event EventHandler Load;
public event EventHandler? Load;
member this.Load : EventHandler
Public Custom Event Load As EventHandler
Тип события
Примеры
В следующем примере показано, как использовать SetDesktopLocationчлены , Load, Activatedи Activate . Чтобы выполнить пример, вставьте следующий код в форму с именем Form1 , содержащую вызываемую Button1 Button и два Label элемента управления с именем Label1 и Label2 .
static int x = 200; static int y = 200; void Button1_Click( System::Object^ sender, System::EventArgs^ e ) < // Create a new Form1 and set its Visible property to true. Form1^ form2 = gcnew Form1; form2->Visible = true; // Set the new form's desktop location so it // appears below and to the right of the current form. form2->SetDesktopLocation( x, y ); x += 30; y += 30; // Keep the current form active by calling the Activate // method. this->Activate(); this->Button1->Enabled = false; > // Updates the label text to reflect the current values of x // and y, which was were incremented in the Button1 control's // click event. void Form1_Activated( Object^ sender, System::EventArgs^ e ) < Label1->Text = String::Format( "x: y: ", x, y ); Label2->Text = String::Format( "Number of forms currently open: ", count ); > static int count = 0; void Form1_Closed( Object^ sender, System::EventArgs^ e ) < count -= 1; >void Form1_Load( Object^ sender, System::EventArgs^ e )
static int x = 200; static int y = 200; private void Button1_Click(System.Object sender, System.EventArgs e) < // Create a new Form1 and set its Visible property to true. Form1 form2 = new Form1(); form2.Visible = true; // Set the new form's desktop location so it // appears below and to the right of the current form. form2.SetDesktopLocation(x, y); x += 30; y += 30; // Keep the current form active by calling the Activate // method. this.Activate(); this.Button1.Enabled = false; >// Updates the label text to reflect the current values of x // and y, which was were incremented in the Button1 control's // click event. private void Form1_Activated(object sender, System.EventArgs e) < Label1.Text = "x: "+x+" y: "+y; Label2.Text = "Number of forms currently open: "+count; >static int count = 0; private void Form1_Closed(object sender, System.EventArgs e) < count -= 1; >private void Form1_Load(object sender, System.EventArgs e)
Shared x As Integer = 200 Shared y As Integer = 200 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ' Create a new Form1 and set its Visible property to true. Dim form2 As New Form1 form2.Visible = True ' Set the new form's desktop location so it appears below and ' to the right of the current form. form2.SetDesktopLocation(x, y) x += 30 y += 30 ' Keep the current form active by calling the Activate method. Me.Activate() Me.Button1.Enabled = False End Sub ' Updates the label text to reflect the current values of x and y, ' which was were incremented in the Button1 control's click event. Private Sub Form1_Activated(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Activated Label1.Text = "x: " & x & " y: " & y Label2.Text = "Number of forms currently open: " & count End Sub Shared count As Integer = 0 Private Sub Form1_Closed(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Closed count -= 1 End Sub Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles MyBase.Load count += 1 End Sub
Комментарии
Это событие можно использовать для выполнения таких задач, как выделение ресурсов, используемых формой.
Дополнительные сведения об обработке событий см. в разделе Обработка и вызов событий.
Form1 load в c что это
Для взаимодействия с пользователем в Windows Forms используется механизм событий. События в Windows Forms представляют стандартные события на C#, только применяемые к визуальным компонентам и подчиняются тем же правилам, что события в C#. Но создание обработчиков событий в Windows Forms все же имеет некоторые особенности.
Прежде всего в WinForms есть некоторый стандартный набор событий, который по большей части имеется у всех визуальных компонентов. Отдельные элементы добавляют свои события, но принципы работы с ними будут похожие. Чтобы посмотреть все события элемента, нам надо выбрать этот элемент в поле графического дизайнера и перейти к вкладке событий на панели форм. Например, события формы:

Чтобы добавить обработчик, можно просто два раза нажать по пустому полю рядом с названием события, и после этого Visual Studio автоматически сгенерирует обработчик события. Например, нажмем для создания обработчика для события Load :

И в этом поле отобразится название метода обработчика события Load. По умолчанию он называется Form1_Load .
Если мы перейдем в файл кода формы Form1.cs, то увидим автосгенерированный метод Form1_Load:
public partial class Form1 : Form < public Form1() < InitializeComponent(); >private void Form1_Load(object sender, EventArgs e) < >>
И при каждой загрузке формы будет срабатывать код в обработчике Form1_Load.
Как правило, большинство обработчиков различных визуальных компонентов имеют два параметра: sender — объект, инициировавший событие, и аргумент, хранящий информацию о событии (в данном случае EventArgs e ).
Но это только обработчик. Добавление же обработчика, созданного таким образом, производится в файле Form1.Designer.cs:
namespace HelloApp < partial class Form1 < private System.ComponentModel.IContainer components = null; protected override void Dispose(bool disposing) < if (disposing && (components != null)) < components.Dispose(); >base.Dispose(disposing); > private void InitializeComponent() < this.SuspendLayout(); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(284, 261); this.Name = "Form1"; // добавление обработчика this.Load += new System.EventHandler(this.Form1_Load); this.ResumeLayout(false); >> >
Для добавления обработчика используется стандартный синтаксис C#: this.Load += new System.EventHandler(this.Form1_Load)
Поэтому если мы захотим удалить созданный подобным образом обработчик, то нам надо не только удалить метод из кода формы в Form1.cs, но и удалить добавление обработчика в этом файле.
Однако мы можем добавлять обработчики событий и програмно, например, в конструкторе формы:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace HelloApp < public partial class Form1 : Form < public Form1() < InitializeComponent(); this.Load += LoadEvent; >private void Form1_Load(object sender, EventArgs e) < >private void LoadEvent(object sender, EventArgs e) < this.BackColor = Color.Yellow; >> >
Кроме ранее созданного обработчика Form1_Load здесь также добавлен другой обработчик загрузки формы: this.Load += LoadEvent; , который устанавливает в качестве фона желтый цвет.
Form1 load в c что это
Загружай VB, и в путь.При этом очень советуем иметь ПРОГРАММНЫЕ МИНИАТЮРЫ, которые можно заказать по aavov@yandex.ru.Они просто необходимы,когда придется читать текст повторно, без лирики. Итак, создаем первый “Стандартный EXE” (как в Главе 1). На экране имеем примерно такую картинку:
Теперь мы найдем место, куда будем заносить собственно программу. Для этого в верхнем ряду окна нажимаем кнопку “Вид”. В выпавшем меню первая строка и есть та, которая нам нужна: “Код”. Показано на рисунке 3.
У нас поверх окна формы Проект1 – Form1 (Форма) появится окно Проект1 – Form1 (Код). Вверху этого окна у нас имеется два выпадающих списка. Слева — список доступных объектов, справа – события для этих объектов. Объектов у нас сейчас два: (General) и Form. Выбираем строку Form. В поле окна кода появились две строки. Что это значит. Первая строка:
Private Sub Form_Load()
говорит о том, что мыначинаем подпрограмму (Private Sub) или правильней процедуру, которая будет выполняться при загрузке (_Load) нашей формы (Form). Загрузка — это возникающее событие, на которое и отреагирует эта процедура. Последняя строка
просто говорит о том, что этой строкой процедура Form_Load завершается.
Вот только выполнять-то пока нечего. В теле процедуры у нас нет ничего. А поэтому мы сейчас туда чего-нибудь напихаем. Первым делом, выведем на нашу форму какой-нибудь текст. По идиотской традиции, самая первая программа должна выводить на экран надпись типа “Hello, world” («Здравствуй, мир»). Мы же, из чувства противоречия, напишем “Я стану программистом”. Для этого вписываем между двух уже имеющихся у нас строк еще одну. У нас получится вот такая процедура:
Private Sub Form_Load()
Form1 .Print «Я стану программистом»
Строка, которую мы только что вписали в процедуру, представляет собой оператор, в котором первое слово Form1 представляет собой объект с которым мы работаем (не даром Visual Basic — это объектно-ориентированный язык). В нашем случае объект — это форма. Второе слово после точки (Print) представляет собой метод, который мы используем, для того чтобы работать с нашим объектом (формой). Наш метод позволит напечатать на объекте данные, которые следуют далее. Так как строка «Я стану программистом» — текстовая, то она взята в кавычки. Таковы правила языка Visual Basic — то бишь синтаксис.
Теперь можно бы посмотреть как это работает, только ни черта у нас не выйдет. Чтобы эта надпись появилась в форме, надо залезть в окно “Свойства – Form1”. На рис. 2 (см. выше) оно подписано как “Свойства выделенного объекта”. Затем в левой колонке найти строчку со свойством “AutoRedraw”. В этой строке только в правой колонке из выпадающего списка выбрать “True”. Теперь окно перерисуется вместе с нашим чудесным текстом и мы сможем увидеть изменения формы после выполнения программой нашего оператора. Нажмем кнопочку со стрелочкой для запуска нашей программы (показано на рис.4) и наслаждаемся ее работой.
Свойство перерисовки, как и всякое другое можно задавать программно. Это намного правильней, так как в ходе выполнения программы часто приходится менять свойства объектов. Перед нашей строчкой добавим еще одну:
Form1.AutoRedraw = True
А в свойствах формы вернем состояние свойства AutoRedraw с True (Истина) на False (Ложь). Запустим программу. Она работает совершенно также. Аналогично можно менять другие свойства формы. В дальнейшем по мере необходимости мы будем обращаться к ним.
Ясное дело, форму можно растягивать. Можно также менять ее положение на экране, двигая квадратик в окне “Размещение формы”.
Еще одно. Можно создавать несколько форм и управлять объектами одной из другой. Для этого в меню выберите “Проект – Добавить форму – Открыть”.
Только если после этого запустить программу, второй формы не увидишь. Чтобы сделать ее видимой, надо прописать в Form1 такой код:
Теперь наш проект надо сохранить. Выбери “Файл – Сохранить проект” или нажми на изображение дискетки. Появиться окно сохранения проекта, которое обычно предлагает путь «C:\Program Files\Microsoft Visual Studio\VB98». Но туда сохранять ни в коем случае не надо, иначе файлы твоего проекта перпутаются с файлами Visual Basic. Лучше создать отдельную папочку с названием, которое отражает суть проекта и сохранить проект в ней. Так надо поступать с каждым проектом. Мы будем сохранять файлы под теми же именами, которые предлагает VB, хотя их, конечно, можно задавать какие угодно.
Последний этап – создание выполняемого (т.е. EXE) файла, то ради чего мы это все делали. Нажми “Файл – Создать Проект1.exe…”, сохраняй и готово. Теперь ты можешь закрыть VB и запускать свой EXE-файл. Поздравляю! Ты создал первую программу на Visual Basic. Вариант этой программы, только несколько расширенный, я привожу ниже. В ней показано изменение некоторых свойств формы. Скопируй ее в тело подпрограммы и поэкспериментируй с ней. Обрати внимание на комментарии. Они выделяются зеленым цветом и пишутся после апострофа. Нужны они только для пояснений, не компилируются и программой не выполняются.
‘******вот некоторые возможности работы с формой*****
Private Sub Form_Load()
Form1.AutoRedraw = True ‘включает перерисовку формы 1
Form1.BackColor = vbBlack ‘меняет цвет формы 1 на черный
Form1.ForeColor = &HFF& ‘меняет цвет текста формы 1 на красный
Form1.BorderStyle = 3 ‘меняет рамку (бордюр) формы 1 на неизменяемую
Form1.Font.Size = 18 ‘меняет размер шрифта формы 1 на 18
Form1.Font.Underline = True ‘подчеркивает текст в форме 1
Form1.Caption = «Моя первая программа» ‘устанавливает заголовок формы 1
Form1. Print «Я стану программистом» ‘выводит текст на форму 1
Form2.Show ‘делает видимой форму 2
Form2.Width = 9000 ‘устанавливает ширину формы 2 равной 9000 твипов
Form2.WindowState = 1 ‘сворачивает форму 2
End Sub
Скачать код можно вверху страницы.
Пользовательские скрипты
В случае пользовательских серверных скриптов вы самостоятельно пишете всю логику коммуникации с базой данных, выполняете запросы для получения данных из нужных таблиц, а также запросы для вставки, обновления и удаления данных.
Базовые шаблоны загрузки и сохранения данных на клиенте остаются неизменными:
webix.ui({ view:"list", url:"load.php", save:"save.php" })Свойство url загружает данные, которые возвращает скрипт. Свойство save указывает на скрипт, который сохраняет данные в базу каждый раз, когда вы вносите изменения на клиенте.
Инструкции ниже помогут вам настроить скрипты для возвращения данных и ответы на операции редактирования. Мы используем PHP с базой данных SQLite3.
- Загрузка данных
- Сохранение данных
- Настройка ответа с сервера
Если вам нужно получить данные из другого домена и вы не уверены в том, как это сделать, ознакомьтесь с нашим вариантом кросс-доменной загрузки данных.
Загрузка данных
Webix компоненты поддерживают входные данные в JSON, JSArray, XML, HTMLtable и CSV форматах, поэтому убедитесь, что ваш скрипт возвращает данные поддерживаемого формата.
Вы можете представить полученный массив в JSON с помощью предназначенной для этого функции (json_encode() в PHP)
// подключаем базу данныъх $db = new SQLite3('../../../common/testdata.sqlite'); // выбираем данные $res = $db->query("SELECT * FROM films"); // конвентируем данные в json $data = array(); while ($rec = $res->fetchArray(SQLITE3_ASSOC)) // каждый ряд $data[] = $rec; // выводим результат echo json_encode($data);Загрузка в Datatree
В Datatree можно передать инлайн данные, сгруппированные на клиенте или иерархическими данными, сгруппированные серверным скриптом.
Для иерархических данных вам необходимо:
- relation_id поля в таблице базы данных, который будет хранить ID родительской записи для каждой записи. Для корня этот параметр равен 0;
- (необязательно) - поле open для каждой записи, которое определяет, будет ли превоначально открыта эта запись (1) или нет (0). При условии, что у неё есть дочерние элементы, конечно.
Данные формируются функцией, которая отправляет запрос с WHERE к базе. Запрос просит с сервера данные обо всех элементах, начиная с корня (это у него parent=0) и включая всех его детей. Данные, которые должна вернуть эта функция - JSON массив объектов. Каждый объект, если у него есть дети, должен хранить их массив в проперти с именем data.
function get($id = 0) { $db = new SQLite3('../../../common/testdata.sqlite'); // подключаемся к базе данных // выбираем данные $res = $db->query("SELECT * FROM films_tree WHERE parent= "); // конвертируем данные в json $data = array(); while ($rec = $res->fetchArray(SQLITE3_ASSOC)) { $rec["data"] = get($rec["id"]); // помещаем дочерние элементы в "data" $data[] = $rec; } // возвращаем json return $data; } // форматируем результат echo json_encode(get());Загрузка через форму
Метод load() содержит загружающий скрипт и иногда требует ID записи как часть GET запроса. Применяется к инициализированной форме на клиенте.
$$("form1").load("server/form.php?id=3");На сервере у вас будет ID для использования в WHERE при SELECT запросе.
$id = $_GET["id"]; $res = $db->query("SELECT * FROM films WHERE > ");Сохранение данных
Метод save инициализирует DataProcessor, который получает готовые данные для отправки на сервер и вызывает скрипт при каждом изменении данных. Логику процессора по умолчанию можно кастомизировать.
Скрипты получают изменённые данные в теле POST зпроса. Для каждой добавленной, изменённой или удалённой записи все свойства её объекта отсылаются вместе с webix_operation.
id 8 rank 99 rating title New votes 100 webix_operation delete year 2012Вы также можете посылать дополнительные свойства элемента или обновлять этот элемент на клиенте:
var item = this.getItem(id); item.old_rank = some; // setting new property and value for it this.updateItem(id);Новое свойство old_rank будет передано вместе с остальными в POST запросе.
Вы можете получить эти параметры для формирования соответствующих запросов базы данных.
$operation = $POST['webix_operation']; if($operation=="insert") $db->query("INSERT SQL query");Не забудьте экранировать данные пользователя во избежании SQL инъекций:
$title = $db->escapeString($_POST["title"]);и конвертировать данные в JSON согласно ранее упомянутому шаблону.
Сохранение в Datatree
В случае с datatree используйте ранее упомянутый шаблон. Также не забудьте обновить родительское поле значение элемента при запросах INSERT и UPDATE.
Конечно, вам нужно отрисовать это поле в процессе загрузки (SELECT * обеспечит это) и обновить его на клиенте при работе с данными дерева.
$parent = $_POST["parent"]; // запросыСохранение через форму
Обычно, форма сохраняется при каком-либо событии на странице (например, нажатие на кнопку), поэтому нет необходимости создавать DataProcessor для этих целей. В результате POST запрос будет содержать только данные формы и no webix_operation тип.
Затем, необходимо решить, что делать дальше:
- обновить данные записи (которая была загружена в форму) на сервере
- добавить данные в необходимую таблицу в базе данных (напрмиер, создать новую запись);
- обновить данные на клиенте. В этом случае форма должна быть привязана к компоненту или коллекции данных, для того чтобы форма могла получать данные из этого компонента и отправлять изменения назад, в то время как их скрипты для сохранения обработают эти изменения.
Типичный Ajax запрос для сохранения данных из формы на сервер выглядит следующим образом:
webix.ajax().post("server/form_save.php", $$("myform").getValues(), function(response) { webix.message(response.status); });Метод формы getValues() возвращает данные всех полей в виде JSON объекта - как раз подходит для параметров Ajax.
Далее мы рассмотрим варианты настройки ответов с сервера. О Webix API при Ajax операциях читайте эту статью.
Настройка серверного ответа
Для каждого запроса желательно настраивать ответ, который может являться обычным текстом или JSON объектом с необходимыми параметрами:
// простой текст при ошибке echo "Data saving was not performed"; // JSON с ID элемента и статусом ошибки echo '< "id":"'.$id.'", "status":"error" >'; // JSON с ID элемента и статусом успеха echo '< "id":"'.$id.'", "status":"success" >'; // JSON для успешной операции добавления echo '< "id":"'.$id.'", "status":"success", "newid":"'.$db->lastInsertRowID().'" >'; $res = $db->query(SQL query); if($res) // ответ в случае успеха else // ответ в случае ошибкиДля операции INSERT новое ID является важным атрибутом, так как на клиенте любой добавленный элементп получает временное ID, сгенерированное методом webix.uid() (например, 1369905287157).
После добавления этого элемента в таблицу базы данных, он получает "нормальное" ID (путём инкрементирования). Это ID будет загружено на клиент при обновлении страницы. Поэтому вам может понадобится это новое ID дял работы с недавно добавленным элементом.
Если вы используете Ajax запрос, эти ответы можно вывести в коллбэке. Если ответ - это JSON объект, любое его поле можно обработать отдельно.
webix.ajax().post("server/save.php", {}, function(response) { webix.message(response.status); });