3 место Создание и работа с собственными формами (окнами) Windows через сниппеты C#.

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
В рамках и во имя первого, но надеюсь, не единственного конкурса статей)))
О чем будет мануал?
Здесь я хочу рассказать о том, как на C# создать собственную форму для ввода данных пользователем на любой стадии проекта. Сейчас ввод данных осуществляется через InputSettings, которые заполняются в начале проекта, и внести какие либо корректировки по ходу выполнения проекта не представляется возможным. Здесь я расскажу, как самостоятельно создать свои:
Вероятно, эта информация больше пригодится тем, кто пишет проекты на заказ, но, возможно, кто-то решит использовать эти возможности и в своих проектах.

В любом случае мануал будет, по возможности, написан для нулевого уровня пользователей, с комментариями - что и зачем тут делается.
Проект со всеми рабочими сниппетами прикреплен в сааааамом низу

1) Создание стандартного окошка формы

Вот этим кодом создается стандартное окошко Windows
Код:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "Наша форма";
F.ShowDialog();
return 0;
1.jpg


Вот мы получили стандартное окошко Windows которое можно растягивать, закрыть крестиком, свернуть, развернуть… в общем самое обычное, среднестатистическое окошко, которое встает рано, приходит с работы поздно, жена пилит...
Разберем, что же там написано.
Первая строка

Код:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
При помощи именно неё мы создаем пустую форму с именем F. Имя может быть практически любым сочетанием букв, к примеру, можно записать и так:
Код:
System.Windows.Forms.Form prostaya_forma = new System.Windows.Forms.Form();
Но F мне показалось покороче)))

Вторая строка
Код:
F.Text = "Наша форма";
Этой строчкой, мы задаем заголовок нашей формы. В принципе можно проигнорировать, но так понятнее.

Какие еще атрибуты могут пригодиться в работе:
Код:
F.Width=100;    //- задает ширину формы в пикселях
F.Height=100;    //- задает высоту формы в пикселях
Свойств у формы очень много, и, чтобы со всеми ими разобраться данного мануала не хватит, поэтому ограничимся основными, а тем, кому любопытно – http://msdn.microsoft.com/ru-ru/library/system.windows.forms.form_properties(v=vs.110).aspx
Третья строка
Код:
F.ShowDialog();
При помощи неё мы, как бы намекаем, что нашу форму неплохо было бы показать… в противном случае глупая оболочка windows форму создаст, но никто её не увидит. Главное не забывать – что эту строку надо писать в самом конце, когда наша форма обросла всеми нужными нам свойствами, и на неё навешаны все нужные нам элементы. Так как, все что пойдет после этой строки, так же будет присутствовать на форме , но пользователь этого тоже не увидит))))

И последняя – четвертая строка.
Код:
Return 0;
Данная строка сделана тут в угоду работе Zennoposter. В общем, не углубляясь в детали – в результате работы сниппета, должно быть получено какое-то значение в переменную. В нашем случае эта переменная называется “zero” и результатом return 0; в неё будет положена цифра 0. В противном случае проджект мейкер будет ругаться и говорить, что блок заполнен неправильно.
На самом деле, достаточно просто указать блоку переменную, и не писать return, но горбатого могила исправит – поэтому я везде дописываю))).

Ну а дальше начнем навешивать на нашу форму элементы!

2) Текстовые поля (textbox, richtextbox)

Теперь все будет намного проще) вот этот код инициализирует обычное поле под строчку текста.

Код:
//создаем текстбокс
System.Windows.Forms.TextBox textb = new System.Windows.Forms.TextBox();
//указываем местоположение
textb.Location = new System.Drawing.Point(50,50);
//так же можно указать размеры текстбокса
textb.Width=200;
// добавляем его на форму
F.Controls.Add(textb);
Как видите я его уже закомментировал и тут все достаточно понятно.
  1. Создаем текстбокс с именем textb
  2. Говорим полю textb2 где оно должно находиться
  3. И добавляем его на форму.
Ниже я привел скриншот поля с двумя текстбоксами с разным местоположением
2.jpg


Как получить данные из текстбокса в переменную Zennoposter?

Здесь я разберу самый топорный способ установки значения. Технически более грамотный будет в разделе с Кнопками.

Для демонстрации работы примера – я создал еще одну переменную с именем test.
Для того, чтобы получить доступ к содержимому текстбокса достаточно воспользоваться простой командой – textb.Text и она вернет содержимое текстбокса.
3.jpg


Сработало!!!! Магия!!!

4.jpg

Как установить данные из переменной Zennoposter в textbox?
Все практически по аналогии с кодом выше, только меняем местами текст бокс и переменную.
5.jpg

Рабочий пример лежит в прикрепленном проекте. (В сааааамом низу)

Инициализация поля richtextbox

Поскольку мы уже умные и все знаем, думаю будет достаточно только кода с комментариями)

Код:
//создаем richтекстбокс
System.Windows.Forms.RichTextBox rtbox = new System.Windows.Forms.RichTextBox();
//указываем местоположение
rtbox.Location = new System.Drawing.Point(25,25);
//указываем размеры в пикселях
rtbox.Width =200;
rtbox.Height = 300;
//крепим на форму
F.Controls.Add(rtbox);
6.jpg

Работа с содержимым RichTextBox происходит аналогично с обычным Textbox

7.jpg

Опять магия!

8.jpg
 
Тема статьи
Нестандартные хаки
Номер конкурса статей
Первый конкурс статей

Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

Последнее редактирование:

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
3) Выпадающие списки

Собственно сам код с комментариями
Код:
//создаем выпадающий список
System.Windows.Forms.ComboBox combobox = new System.Windows.Forms.ComboBox();
//указываем, какие в нем должны быть значения
combobox.Items.AddRange(new object[] {"котик1","котик2","котик3"});
//Говорим куда хотим его поставить
combobox.Location = new System.Drawing.Point(30,30);
//указываем его ширину, если нужно
combobox.Width=150;
//крепим его на форму
F.Controls.Add(combobox);
9.jpg

Есть и другие способы накормить выпадающий список значениями.

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

Приложу лишь еще один способ заполнения значений из списка Zennoposter. (иницализация списка и его наполнение на вашей совести)
Код:
//указываем список, в котором лежат нужные нам значения
var list = project.Lists["Список 1"];
// первый вариант наполнения
foreach(string data in list)//для каждой строки data в списке list
{
    combobox.Items.Add(data);//добавить объект на комбобокс
}
Работая данным способом вы получаете возможность обрабатывать вкладываемые значения.
10.jpg

Или так

Код:
//указываем список, в котором лежат нужные нам значения
var list = project.Lists["Список 1"];
// второй вариант наполнения
combobox.Items.AddRange(list.ToArray());
таким способом мы просто положим список как есть.
11.jpg


Доступ к выбранному элементу (а при этом способе он может быть только один) осуществляется следующим кодом, который вам уже знаком)) (Да да! Дальше я буду исключительно капитанить)

Код:
return combobox.Text;
12.jpg
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
4) Радиобаттоны

Код с комментариями
Код:
//создаем первый радиобаттон
System.Windows.Forms.RadioButton rb1 = new System.Windows.Forms.RadioButton();
//присваиваем значение
rb1.Text="кнопочка 1";
//говорим куда поставить
rb1.Location = new System.Drawing.Point(5,5);
//добавляем rb1 на форму
F.Controls.Add(rb1);
13.jpg

Думаю, не секрет, что одного будет маловато) и нам нужно еще парочку

Код:
//создаем первый радиобаттон
System.Windows.Forms.RadioButton rb1 = new System.Windows.Forms.RadioButton();
//создаем второй радиобаттон
System.Windows.Forms.RadioButton rb2 = new System.Windows.Forms.RadioButton();
//создаем третий радиобаттон
System.Windows.Forms.RadioButton rb3 = new System.Windows.Forms.RadioButton();

//присваиваем значение
rb1.Text="кнопочка 1";
rb2.Text="кнопочка 2";
rb3.Text="кнопочка 3";
//говорим куда поставить
rb1.Location = new System.Drawing.Point(5,5);
rb2.Location = new System.Drawing.Point(5,25);
rb3.Location = new System.Drawing.Point(5,45);
//добавляем rb1 на форму
F.Controls.Add(rb1);
//добавляем rb2 на форму
F.Controls.Add(rb2);
//добавляем rb3 на форму
F.Controls.Add(rb3);
14.jpg


Две группы радиобаттонов

Если нам нужно, чтобы наш пользователь выбрал по одному варианту из двух групп чекбоксов – нам нужно будет использовать элемент Groupbox.

Грубо говоря - если нам надо получить результаты этой таблицы
Цвет котикаРазмер котика
ЧерныйМаленький
БелыйСредний
РыжийБольшой
Редкий окрас - "Скумбрия на снегу"А котик ли это?
[TBODY] [/TBODY]

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

Пока ничего нового – просто создали элементы для работы
15.jpg


И задали им координаты.

АЛЯРМ! Координаты будут уже задаваться не от основной формы, а внутри групбокса.
16.jpg


Будем гуманистами – не дадим коварной винде обрезать наши значения в кнопках. Если нужны жесткие значения – пользуемся атрибутом - Width
17.jpg

И вот наконец то, ради чего это все затевалось (Раскаты грома! Звон цепей! Котики мяукают!)

18.jpg

И как видите – можно выделить по одному элементу в каждой группе
19.jpg


Как получить в проект то, что там накликал пользователь?

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

Очень важно для понимания нижеследущего кода – у программистов все не как у людей, поэтому считать они начинают не с одного а с нуля))), т.е. если программист здорового человека считает котиков – 1,2,3,4, то программист курильщика – 0,1,2,3. Именно поэтому в цикле (о нем чуть ниже) первое значение – 0.

Код определяющий значение радиобаттонов.
Код:
for(int i=0;i<grbox1.Controls.Count;i++)
{
    if(((System.Windows.Forms.RadioButton)grbox1.Controls[i]).Checked==true))
    {
        project.Variables["test"].Value=grbox1.Controls[i].Text;
        //либо, если раскомментировать строку ниже - можно установить число а не значение
        //project.Variables["test"].Value=i.ToString();
    }
}

for(int i=0;i<grbox2.Controls.Count;i++)
{
    if(((System.Windows.Forms.RadioButton)grbox2.Controls[i]).Checked==true))
    {
        project.Variables["test2"].Value=grbox2.Controls[i].Text;
        //либо, если раскомментировать строку ниже - можно установить число а не значение
        //project.Variables["test"].Value=i.ToString();
    }
}
20.jpg

Нижеприложенполныйлистингсниппета

Код:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "Наша форма";

//создаем радиобаттоны
System.Windows.Forms.RadioButton rb1 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb2 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb3 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb4 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb5 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb6 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb7 = new System.Windows.Forms.RadioButton();
System.Windows.Forms.RadioButton rb8 = new System.Windows.Forms.RadioButton();
//присваиваем значение
rb1.Text="Черный";
rb2.Text="Белый";
rb3.Text="Рыжий";
rb4.Text="Редкий окрас – «Скумбрия на снегу»";
rb5.Text="Маленький";
rb6.Text="средний";
rb7.Text="Большой";
rb8.Text="А котик ли это?";
//размещаем радиобаттоны
rb1.Location = new System.Drawing.Point(0,25);
rb2.Location = new System.Drawing.Point(0,45);
rb3.Location = new System.Drawing.Point(0,65);
rb4.Location = new System.Drawing.Point(0,85);
rb5.Location = new System.Drawing.Point(0,25);
rb6.Location = new System.Drawing.Point(0,45);
rb7.Location = new System.Drawing.Point(0,65);
rb8.Location = new System.Drawing.Point(0,85);
//разрешаем нашим радиобаттонам иметь ширину, подходящую под содержимое
rb1.AutoSize=true;
rb2.AutoSize=true;
rb3.AutoSize=true;
rb4.AutoSize=true;
rb5.AutoSize=true;
rb6.AutoSize=true;
rb7.AutoSize=true;
rb8.AutoSize=true;
//Создаем два GroupBox (группирующих бокса)
System.Windows.Forms.GroupBox grbox1 = new System.Windows.Forms.GroupBox();
System.Windows.Forms.GroupBox grbox2 = new System.Windows.Forms.GroupBox();
//назовем наши группы
grbox1.Text = "Цвет котика";
grbox2.Text = "Размер котика";
//говорим куда поставить групбоксы
grbox1.Location = new System.Drawing.Point(0,0);
grbox1.Location = new System.Drawing.Point(0,120);
//разрешаем им тянуться до подходящего размера
grbox1.AutoSize=true;
grbox2.AutoSize=true;
//добавляем радиобаттоны на групбокс1
grbox1.Controls.Add(rb1);
grbox1.Controls.Add(rb2);
grbox1.Controls.Add(rb3);
grbox1.Controls.Add(rb4);
//добавляем радиобаттоны на групбокс2
grbox2.Controls.Add(rb5);
grbox2.Controls.Add(rb6);
grbox2.Controls.Add(rb7);
grbox2.Controls.Add(rb8);
//добавляем групбоксы на форму
F.Controls.Add(grbox1);
F.Controls.Add(grbox2);
//запускаем форму
F.ShowDialog();


//Забираем значения в наши переменные

//Делаем цикл, в котором будут перебраны все значения от 0 до grbox1.Controls.Count
//grbox2.Controls.Count -  это количество наших радиобаттонов, которые мы в него положили
//При этом при переборе - текущее значение - 0,1,2,3 или другое, будет находится в переменной i
for(int i=0;i<grbox1.Controls.Count;i++)
{
    if( (((System.Windows.Forms.RadioButton)grbox1.Controls[i]).Checked==true))
    {
        //устанавливаем значение переменной тест
        project.Variables["test"].Value=grbox1.Controls[i].Text;
        //либо, если раскомментировать строку ниже - можно установить число а не значение
        //project.Variables["test"].Value=i.ToString();
    }
}

//Делаем цикл, в котором будут перебраны все значения от 0 до grbox2.Controls.Count
//grbox2.Controls.Count -  это количество наших радиобаттонов, которые мы в него положили
//При этом при переборе - текущее значение - 0,1,2,3 или другое, будет находится в переменной i
for(int i=0;i<grbox2.Controls.Count;i++)
{
    //проверяем установлено ли значение для чекбокса с номером i
    if( (((System.Windows.Forms.RadioButton)grbox2.Controls[i]).Checked==true))
    {
        //устанавливаем значение переменной zero
        project.Variables["test2"].Value=grbox2.Controls[i].Text;
        //либо, если раскомментировать строку ниже - можно установить число а не значение
        //project.Variables["test"].Value=i.ToString();
    }
}
return 0;
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
5) Чекбоксы

Код:
//создаем чекбокс
System.Windows.Forms.CheckBox chbox1 =  new System.Windows.Forms.CheckBox();
//задаем имя чекбоксу
chbox1.Text = "чекбокс1";
//его положение в окне
chbox1.Location = new System.Drawing.Point(30,30);
//добавляем на форму
F.Controls.Add(chbox1);
21.jpg


По аналогии с радиобаттонами – один чекбокс – для слабаков! Нам нужно не меньше трех!
Код:
//создаем чекбоксы
System.Windows.Forms.CheckBox chbox1 =  new System.Windows.Forms.CheckBox();
System.Windows.Forms.CheckBox chbox2 =  new System.Windows.Forms.CheckBox();
System.Windows.Forms.CheckBox chbox3 =  new System.Windows.Forms.CheckBox();
//задаем имя чекбоксам
chbox1.Text = "чекбокс1";
chbox2.Text = "чекбокс1";
chbox3.Text = "чекбокс1";
//положение в окне
chbox1.Location = new System.Drawing.Point(0,30);
chbox2.Location = new System.Drawing.Point(0,60);
chbox3.Location = new System.Drawing.Point(0,90);
//кидаем на форму
F.Controls.Add(chbox1);
F.Controls.Add(chbox2);
F.Controls.Add(chbox3);
22.jpg

Как получить значение с выбранных чекбоксов?

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

Устанавливаем значения, в нашу форму в чекбоксы.
Код:
//Устанавливаем отметки в нужные нам чекбоксы
bool flag;

//пробуем распознать текст как булеву переменную True или False
System.Boolean.TryParse(project.Variables["test"].Value, out flag);
//устанавливаем результат нашего распознавания, если распознать не удалость, то False
chbox1.Checked=flag;

System.Boolean.TryParse(project.Variables["test2"].Value, out flag);
chbox2.Checked=flag;

System.Boolean.TryParse(project.Variables["test3"].Value, out flag);
chbox3.Checked=flag;

//запускаем форму
F.ShowDialog();
Что стоит отметить в этом коде, так это введение булевой переменной flag, которая, как раз и определяет успешность трансформации значения из переменной Zennoposter. И второе!

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


Функция TryParse распознает значения типа True, true, False, false, если вы напишете что то другое, к примеру – «джигурда» - то все равно будет false.

Получаем накликанные значения

Код:
//забираем значения установленные в чекбоксы
project.Variables["test"].Value = chbox1.Checked.ToString();
project.Variables["test2"].Value = chbox2.Checked.ToString();
project.Variables["test3"].Value = chbox3.Checked.ToString();

23.jpg

24.jpg
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
6) Листбоксы
Код инициализации
Код:
//создаем листбокс
System.Windows.Forms.ListBox listb = new System.Windows.Forms.ListBox();
//указываем его размеры
listb.Width=150;
listb.Height=150;
//Указываем положение на форме
listb.Location = new System.Drawing.Point(30,30);
//кидаем на форму
F.Controls.Add(listb);
25.jpg


Как вставить в листбокс свои элементы.
Код:
//указываем список, в котором лежат нужные нам значения
var list = project.Lists["Список 1"];
// первый вариант наполнения
foreach(string data in list)//для каждой строки data в списке list
{
    listb.Items.Add(data);//добавить объект на листбокс
}
Или так
Код:
//указываем список, в котором лежат нужные нам значения
var list = project.Lists["Список 1"];
// второй вариант наполнения
listb.Items.AddRange(list.ToArray());
При помощи этого кода – мы получаем выбранное значение
Код:
//получаем значение в переменную
project.Variables["test"].Value = listb.SelectedItem.ToString();
//или так
return listb.SelectedItem;
26.jpg
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
7) Кнопки
Вот мы и добрались до моего любимого – до кнопочек))))

Код:
//создаем кнопку
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "Кнопочка";
//положение в окне
button.Location = new System.Drawing.Point(50,50);
//размер кнопочки
button.Size=new System.Drawing.Size(75, 75);
//кидаем на форму
F.Controls.Add(button);
Выглядит вроде бы безобидно))
27.jpg

Но есть одна печалька – сколько на кнопочку не нажимай – ничего не происходит

Поэтому мы допишем следущие строчки
Код:
button.Click+= delegate(object sender, System.EventArgs e)
{
        F.Dispose();
};
Это и есть тот самый обработчик событий, о котором, я упоминал, или вы где то слышали). Данный код делает важное дело – закрывает нашу форму F. По сути мы можем заменить имя кнопки на «Сохранить» или «Продолжить» и никого не обманем)

Важно помнить, что описание обработки событий, должно быть произведено до отображения формы, т.е. до строчки F.ShowDialog();

Код:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "Наша форма";

//создаем кнопку
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя чекбоксам
button.Text = "Сохранить";
//положение в окне
button.Location = new System.Drawing.Point(50,50);
//размер кнопочки
button.Size=new System.Drawing.Size(75, 75);
//кидаем на форму
F.Controls.Add(button);
//описываем событие для клика по кнопке
button.Click+= delegate(object sender, System.EventArgs e)
{
        F.Dispose();о//Dispose – это уничножение объекта. Есть аналог Close, но Dispose //выгрузит форму из памяти
};
//запускаем форму
F.ShowDialog();
return 0;

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

Вот кусочек кода для любопытных:

Код:
button.MouseMove+=delegate(object sender, System.Windows.Forms.MouseEventArgs e)
{
    button.Text="Щекотно же!";
};
button.MouseHover+=delegate(object sender, System.EventArgs e)
{
    button.Text="Тут рыбы ТОЧНО нет";
};
button.MouseLeave+=delegate(object sender, System.EventArgs e)
{
    button.Text="Сохранить";
};
Если вы читали, что тут написано – его не сложно будет вставить)
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
8-) Работа с внешними фаилами

По сути это аналог привязать список к фаилу или сохранить список в фаил)))
Но все же расскажем немножко и про них, и работу со стандартным окном открытия/сохранения фаила в windows

Получить значение из фаила
Тут нам пригодятся уже проверенные кнопки)))
Код:
//создаем кнопку
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя кнопке
button.Text = "Кнопочка";
//положение в окне
button.Location = new System.Drawing.Point(50,50);
//размер кнопочки
button.Size=new System.Drawing.Size(75, 75);

//создаем форму
System.Windows.Forms.OpenFileDialog of = new System.Windows.Forms.OpenFileDialog();
//устанавливаем директорию по умолчанию
of.InitialDirectory = "d:\\" ;
//устанавливаем фильр, какие фаилы нас интересуют, и как их называть
of.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*| Фаилы зенки (*.зенкоформат)|*.xmlz" ;
Но этого еще мало! Нужно вставить обработчик события при клике на «Открыть». Ведь пользователь может и не открывать ничего)
Код:
System.Windows.Forms.Form F = new System.Windows.Forms.Form();
F.Text = "Наша форма";

//создаем кнопку
System.Windows.Forms.Button button = new System.Windows.Forms.Button();
//задаем имя кнопке
button.Text = "Кнопочка";
//положение в окне
button.Location = new System.Drawing.Point(50,50);
//размер кнопочки
button.Size=new System.Drawing.Size(75, 75);

//создаем форму
System.Windows.Forms.OpenFileDialog of = new System.Windows.Forms.OpenFileDialog();
//устанавливаем директорию по умолчанию
of.InitialDirectory = "d:\\" ;
//устанавливаем фильр, какие фаилы нас интересуют, и как их называть
of.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*| Фаилы зенки (*.зенкоформат)|*.xmlz" ;
   
//вызываем обработку события
button.Click+=delegate(object sender, System.EventArgs e)
{
//если результатом действия всего этого было нажатие на кнопочку «Открыть»…

    if(of.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
//… то кладем в переменную test адрес к фаилу

        project.Variables["test"].Value= of.FileName;
}
};


//кидаем кнопку на форму
F.Controls.Add(button);
//запускаем форму
F.ShowDialog();

return 0;
И уже потом по адресу из этой переменной можете легко привязывать списки и таблицы внутри Зеннопостера.

Для самых хитрых можно обработать так …

Код:
    if(of.ShowDialog() == System.Windows.Forms.DialogResult.OK)
      {
//… то кладем сразу содержимое фаила в переменную
        project.Variables["test"].Value= System.IO.File.ReadAllText(of.FileName);
}
Или так...
Код:
if(of.ShowDialog() == System.Windows.Forms.DialogResult.OK)
      {
//… то кладем сразу содержимое фаила в список
        project.Lists["Список1"] = System.IO.File.ReadAllLines(of.FileName).ToString();
}
Сохранить значение в фаил
Ничего не меняется, кроме того, что OpenFileDialog меняется на SaveFileDialog.

Записываем в фаил из переменной
Код:
if(sf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    //Записываем из переменной
    System.IO.File.WriteAllText(sf.FileName,project.Variables["test"].Value);
}
Дописываем в фаил из переменной
Код:
if(sf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    //Записываем из переменной
    System.IO.File.AppendAllText(sf.FileName,project.Variables["test"].Value);
}
Записываем в фаил из списка
Код:
if(sf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    //Записываем из списка
    System.IO.File.WriteAllLines(sf.FileName,project.Lists["Список 1"].ToArray());
}
Дописываем в фаил из списка
Код:
if(sf.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    //Записываем из списка
    System.IO.File.AppendAllLines(sf.FileName,project.Lists["Список 1"].ToArray());
}
 

Вложения

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
До! Расширение плюшек!
Если Вам что то непонятно) или чего-то не хватает - дергайте меня, пока я никуда не делся)))

Пы.Сы. но, конечно, писать обвязку на целый проект - это перебор))))
 

bigcajones

Client
Регистрация
09.02.2011
Сообщения
1 216
Благодарностей
683
Баллы
113
Awesome share Lexicon.
 
  • Спасибо
Реакции: Lexicon

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Thank you)))
 
  • Спасибо
Реакции: Karamzin

Vasar

Client
Регистрация
08.04.2010
Сообщения
150
Благодарностей
75
Баллы
28
Круто, но пока не знаю как применить.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Ничего))) зато когда нужно будет применить, вы будете знать где оно лежит)))
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Очень неплохо все и красиво))Если будет возможность киньте что-нибудь из выпадающих списков, аля авито, пощупать,может получится проекты скомпоновать и уменьшить.
 
  • Спасибо
Реакции: Karamzin

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Вечером накидаю))) вы хоть скажите, какой именно список там приглянулся, чтобы уж не зря делать)
 
  • Спасибо
Реакции: Karamzin

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Ну вот как то так) если я вас правильно понял то вот)))))
Там в логике немножко нашаманено, в том плане, что в коде указаны значения одни, но по факту - идет просто порядковый номер)
В общем проект в приложении, код закомментирован))) потыкайте палочкой)))
 

Вложения

  • Спасибо
Реакции: Karamzin и Roman*

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Ну вот как то так) если я вас правильно понял то вот)))))
Там в логике немножко нашаманено, в том плане, что в коде указаны значения одни, но по факту - идет просто порядковый номер)
В общем проект в приложении, код закомментирован))) потыкайте палочкой)))
Я извиняюсь, протестил,скорость не к черту, завис..выключил проект..что то не то
 

Roman*

Client
Регистрация
25.09.2013
Сообщения
1 657
Благодарностей
656
Баллы
113
Сорри)))не заметил другого окна..спсибо будем тестить..надеюсь разберусь и смогу доработать все что получилось.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Да))) а слона то и не заметил))))
 
  • Спасибо
Реакции: Karamzin и Roman*
Регистрация
03.12.2012
Сообщения
187
Благодарностей
90
Баллы
28
Отлично. Получается проект win. forms + zenno.
 

Mandyson

Client
Регистрация
03.06.2012
Сообщения
410
Благодарностей
84
Баллы
28
Спасибо, реально пригодилось.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Велкам)
 
  • Спасибо
Реакции: Karamzin

looternsk

Client
Регистрация
24.08.2013
Сообщения
7
Благодарностей
1
Баллы
3
Респект тебе старина! очень полезная инфа.
Вопрос один: как-то можно реализовать такую ситуация. Допустим я на видеочате хочу картинку повесит где поле камера, сам видеочат написан на adobe flash actionscript, как можно передать в такой сайт свои параметры.
 
  • Спасибо
Реакции: LightWood

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
C flash вообще опыта работы нету, так что ничем помочь не могу...
 
  • Спасибо
Реакции: Karamzin

eagleowl

Client
Регистрация
03.11.2012
Сообщения
263
Благодарностей
30
Баллы
28
А есть возможность использовать подобное окно для вывода информации? Чтобы оно создавалось один раз и потом в нем только обновлялась информация в процессе работы проекта, без открытия новых окон. Чтобы не ждать действий пользователя, т.к. ShowDialog(); ждет пока закроют форму как я понимаю.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
К сожалению нет, т.к. после завершения сниппета, т.е. переходу к следующему экшену выполнение кода будет прекращено, хотя в CodeCreator можно сделать все что хочется, правда, на сколько мне известно, зенноботов из под кодкреатора нету(((
 
  • Спасибо
Реакции: Karamzin

tranton55

Новичок
Регистрация
22.08.2014
Сообщения
1
Благодарностей
1
Баллы
1
Два вопроса (прошу прощения, если есть в текст - я не нашел)
  1. Как поместить форму в центр экрана при появлении
  2. Как разместить просто информационный текст на форме?
 
  • Спасибо
Реакции: Lexicon

Voldemar

Client
Регистрация
13.04.2014
Сообщения
478
Благодарностей
56
Баллы
28
Два вопроса (прошу прощения, если есть в текст - я не нашел)
  1. Как поместить форму в центр экрана при появлении
  2. Как разместить просто информационный текст на форме?
Поддерживаю! Информационный текст на форме, был бы весьма полезен!
 
  • Спасибо
Реакции: Lexicon

eldar

Client
Регистрация
01.07.2011
Сообщения
227
Благодарностей
14
Баллы
18
  • Спасибо
Реакции: Lexicon

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
Ну вы даете))) хоть бы в личку стучали что ли)))\
Самый простой вариант для зенки
Код:
System.Windows.Forms.MessageBox.Show("Слава котикам!!!!");
Если надо что то специфичне - свистите в личку))) а то я все темы не перечитываю)))
 
  • Спасибо
Реакции: svaminar, Voldemar и eldar

Trader1985

Client
Регистрация
14.12.2011
Сообщения
131
Благодарностей
31
Баллы
28
Круто, но пока не знаю как применить.
А я вот сразу придумал. Можно, например, для регистрации в Гугл использовать.
Типа, если вдруг просят подтвердить по телефону: парситься тест и если такая просьба находится всплывает окно, куда и вводим свой телефон – думаю, удобно будет!

Так что, ТС спасибо!
 
  • Спасибо
Реакции: Misha

Кто просматривает тему: (Всего: 6, Пользователи: 0, Гости: 6)