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
 
Номер конкурса статей
  1. Первый конкурс статей
Тема статьи
  1. Нестандартные хаки
Последнее редактирование:
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
 
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.

Грубо говоря - если нам надо получить результаты этой таблицы
[TABLE="class: brtb_item_table, border-width: 2px"][TBODY][TR][TD]Цвет котика[/TD][TD]Размер котика[/TD][/TR]
[TR][TD]Черный[/TD][TD]Маленький[/TD][/TR]
[TR][TD]Белый[/TD][TD]Средний[/TD][/TR]
[TR][TD]Рыжий[/TD][TD]Большой[/TD][/TR]
[TR][TD]Редкий окрас - "Скумбрия на снегу"[/TD][TD]А котик ли это?[/TD][/TR][/TBODY][/TABLE]

То, просто накидав чекбоксов на форму, мы не сможем получить результаты, так как отмеченным может быть только один чекбокс.
Ниже использование двух 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;
 
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
 
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
 
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="Сохранить";
};

Если вы читали, что тут написано – его не сложно будет вставить)
 
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());
}
 

Вложения

До! Расширение плюшек!
Если Вам что то непонятно) или чего-то не хватает - дергайте меня, пока я никуда не делся)))

Пы.Сы. но, конечно, писать обвязку на целый проект - это перебор))))
 
Awesome share Lexicon.
 
  • Спасибо
Реакции: Lexicon
Thank you)))
 
  • Спасибо
Реакции: Karamzin
Круто, но пока не знаю как применить.
 
Ничего))) зато когда нужно будет применить, вы будете знать где оно лежит)))
 
Очень неплохо все и красиво))Если будет возможность киньте что-нибудь из выпадающих списков, аля авито, пощупать,может получится проекты скомпоновать и уменьшить.
 
  • Спасибо
Реакции: Karamzin
Вечером накидаю))) вы хоть скажите, какой именно список там приглянулся, чтобы уж не зря делать)
 
  • Спасибо
Реакции: Karamzin
Ну вот как то так) если я вас правильно понял то вот)))))
Там в логике немножко нашаманено, в том плане, что в коде указаны значения одни, но по факту - идет просто порядковый номер)
В общем проект в приложении, код закомментирован))) потыкайте палочкой)))
 

Вложения

  • Спасибо
Реакции: Karamzin и Roman*
Ну вот как то так) если я вас правильно понял то вот)))))
Там в логике немножко нашаманено, в том плане, что в коде указаны значения одни, но по факту - идет просто порядковый номер)
В общем проект в приложении, код закомментирован))) потыкайте палочкой)))
Я извиняюсь, протестил,скорость не к черту, завис..выключил проект..что то не то
 
Сорри)))не заметил другого окна..спсибо будем тестить..надеюсь разберусь и смогу доработать все что получилось.
 
Да))) а слона то и не заметил))))
 
  • Спасибо
Реакции: Karamzin и Roman*
Отлично. Получается проект win. forms + zenno.
 
Спасибо, реально пригодилось.
 
Велкам)
 
  • Спасибо
Реакции: Karamzin
Респект тебе старина! очень полезная инфа.
Вопрос один: как-то можно реализовать такую ситуация. Допустим я на видеочате хочу картинку повесит где поле камера, сам видеочат написан на adobe flash actionscript, как можно передать в такой сайт свои параметры.
 
  • Спасибо
Реакции: LightWood
C flash вообще опыта работы нету, так что ничем помочь не могу...
 
  • Спасибо
Реакции: Karamzin
А есть возможность использовать подобное окно для вывода информации? Чтобы оно создавалось один раз и потом в нем только обновлялась информация в процессе работы проекта, без открытия новых окон. Чтобы не ждать действий пользователя, т.к. ShowDialog(); ждет пока закроют форму как я понимаю.
 
К сожалению нет, т.к. после завершения сниппета, т.е. переходу к следующему экшену выполнение кода будет прекращено, хотя в CodeCreator можно сделать все что хочется, правда, на сколько мне известно, зенноботов из под кодкреатора нету(((
 
  • Спасибо
Реакции: Karamzin
Два вопроса (прошу прощения, если есть в текст - я не нашел)
  1. Как поместить форму в центр экрана при появлении
  2. Как разместить просто информационный текст на форме?
 
  • Спасибо
Реакции: Lexicon
Два вопроса (прошу прощения, если есть в текст - я не нашел)
  1. Как поместить форму в центр экрана при появлении
  2. Как разместить просто информационный текст на форме?
Поддерживаю! Информационный текст на форме, был бы весьма полезен!
 
  • Спасибо
Реакции: Lexicon
Ну вы даете))) хоть бы в личку стучали что ли)))\
Самый простой вариант для зенки
Код:
Развернуть Свернуть Копировать
System.Windows.Forms.MessageBox.Show("Слава котикам!!!!");

Если надо что то специфичне - свистите в личку))) а то я все темы не перечитываю)))
 
  • Спасибо
Реакции: svaminar, Voldemar и eldar
Круто, но пока не знаю как применить.
А я вот сразу придумал. Можно, например, для регистрации в Гугл использовать.
Типа, если вдруг просят подтвердить по телефону: парситься тест и если такая просьба находится всплывает окно, куда и вводим свой телефон – думаю, удобно будет!

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

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