Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов функции при нажатии на кнопку, Как???? 
:(
    Опции темы
tereres
Дата 19.3.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Язык C#. Имеется окно с TextBox-ом, Кнопкой (Button). Написана функция, которая по координатам, которые по замыслу должны вводится в TextBox-е и при нажатие на Кнопку(Button), должна в окне рисовать определённый рисунок(какой - не важно... там линни и всё такое...). Вопрос - как соединить координаты введённые в TextBox-e с Кнопкой и Функцией? И как сделать чтобы после ввода координат (координаты - цифры) и нажатии на Кнопку вызывалась Функция? В функции при этом должен заполнится массив из введёных координат... Спасибо...

Это сообщение отредактировал(а) tereres - 19.3.2006, 10:46
PM MAIL   Вверх
mr.DUDA
Дата 19.3.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(tereres @ 19.3.2006, 09:46 Найти цитируемый пост)
Язык C#. Имеется окно с TextBox-ом, Кнопкой (Button). Написана функция, которая по координатам, которые по замыслу должны вводится в TextBox-е и при нажатие на Кнопку(Button), должна в окне рисовать определённый рисунок(какой - не важно... там линни и всё такое...). Вопрос - как соединить координаты введённые в TextBox-e с Кнопкой и Функцией? И как сделать чтобы после ввода координат (координаты - цифры) и нажатии на Кнопку вызывалась Функция? В функции при этом должен заполнится массив из введёных координат... Спасибо...

Для начала, изучаем основы C# и WindowsForms. После того, как освоили понятия "класс", "метод", "событие", "форма" и "элемент управления" пишем простейший код:
  • на форме находится TextBox, Button и Panel (на последней отрисовывается наша фигура)
  • на событие Click кнопки подписан обработчик button1_Click
  • на событие Paint панели подписан обработчик panel1_Paint
  • в обработчике события Click берём текст из TextBox и преобразуем в массив структур Point
  • в обработчике события Paint проверяем массив на null и если массив заполнен - рисуем линии по координатам
Пример, принимающий из TextBox массив чисел, разделённых точкой с запятой, и рисующий фигуру заданную введёнными координатами:
Код
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // массив координат точек, по которым строится фигура
        Point[] points = null;

        // обработчик нажатия кнопки на форме
        private void button1_Click(object sender, EventArgs e)
        {
            // разбиваем текст из TextBox на массив подстрок, разделённых ';'
            string[] str_numbers = textBox1.Text.Split(';');

            // создаём массив координат точек, длина которого = количеству пар координат
            points = new Point[str_numbers.Length / 2];
            
            // проходим в цикле по строковым координатам, заполняем массив points
            int i = 0;
            for(int j = 0; j < points.Length; j++, i+=2)
                points[j] = new Point(int.Parse(str_numbers[i]), int.Parse(str_numbers[i + 1]));

            // обновляем панель
            panel1.Refresh();
        }

        // обработчик события Paint панели
        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            // если массив координат задан, рисуем соединённые линии по координатам
            if(points != null)
                e.Graphics.DrawLines(Pens.Black, points);
        }
    }
}



--------------------
user posted image
PM MAIL WWW   Вверх
tereres
Дата 19.3.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Cпасибо! Принцип вроде понял, хотя твой код не откомпелировался... Вот только как сделать Refresh окна? Функция panel1.Refresh(); не идёт... может я не правельно её использую? Может место panel1 надо писать что-то другое? Я просто новечок в программировании под виндоус, второй день разбераю... Вроде уже всё написал - осталось функцию обновления окна написать - и вроде всё... Спасибо!

PM MAIL   Вверх
mr.DUDA
Дата 19.3.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(tereres @ 19.3.2006, 11:12 Найти цитируемый пост)
Cпасибо! Принцип вроде понял, хотя твой код не откомпелировался... Вот только как сделать Refresh окна? Функция panel1.Refresh(); не идёт... может я не правельно её использую? Может место panel1 надо писать что-то другое? Я просто новечок в программировании под виндоус, второй день разбераю... Вроде уже всё написал - осталось функцию обновления окна написать - и вроде всё... Спасибо!

Не откомпилироваться мог по двум причинам: либо у тебя студия 2003 (код написан под второй .NET Framework и 2005-ю студию), либо ты не вытянул на форму элемент управления "Panel" (на это косвенно указывают твои вопросы). Вместо панели можно рисовать на чём угодно, хоть на форме напрямую, может так даже будет проще. Обновление окна выполняется методом Refresh, который есть у любого визуального элемента (у формы, у кнопки, у панели и т.д.). Метод Refresh очищает окно и генерирует событие Paint. Необходимо подписаться на событие Paint и в обработчике можно рисовать линии и др. примитивы на канве (e.Graphics). На всякий случай: подписаться на событие визуального элемента можно в дизайнере, выделив данный элемент и дважды кликнув по имени события в окне Properties на закладке Events.


--------------------
user posted image
PM MAIL WWW   Вверх
tereres
Дата 19.3.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Да, я не пользуюсь Studio2005... Я предпочетаю Sharp Developer... Тут у меня возникла другая проблемма - как мне из TextBox-а возратить массив int - если в TextBox-е числа различаются ","? Для расстояния... у меня каждая расстояние - число(а не пара чисел), а потом уже координаты сами вычесляются.. Т.е. фактический как преобразовать string в массив int? Спасибо.
PM MAIL   Вверх
VisualProgrammerNET
Дата 19.3.2006, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почётный халявщик
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.10.2005
Где: Зеленоград

Репутация: 4
Всего: 6



Код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication2
{
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            int len = textBox1.Text.Length;
            int[] mass = new int[len];
            for (int i = 0; i < len; i++)
            {
                mass[i] = Int32.Parse(textBox1.Text.Substring(i, 1));
            }

            foreach (int p in mass)
                label1.Text += p.ToString();
        }
    }
}



--------------------
3 ГОДА НА user posted image 
PM MAIL ICQ   Вверх
mr.DUDA
Дата 19.3.2006, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата
int len = textBox1.Text.Length;
int[] mass = new int[len];
for (int i = 0; i < len; i++)

Честно говоря, смысла в этом коде нет. Вы заполняете массив int'ов значениями, каждое из которых равно цифре, полученной из строки, по соответствущей позиции


--------------------
user posted image
PM MAIL WWW   Вверх
tereres
Дата 19.3.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 18.3.2006

Репутация: нет
Всего: нет



Mr.DUDA - ты в принципе прав... а как сделать так, чтобы нассив int-ов заполнялся числами которые определены через запятую в TextBox-е: "24,58,5,487,4,48"?
PM MAIL   Вверх
mr.DUDA
Дата 19.3.2006, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Цитата(tereres @ 19.3.2006, 20:09 Найти цитируемый пост)
Mr.DUDA - ты в принципе прав... а как сделать так, чтобы нассив int-ов заполнялся числами которые определены через запятую в TextBox-е: "24,58,5,487,4,48"?

Вместо
Код
string[] str_numbers = textBox1.Text.Split(';');

пишем
Код
string[] str_numbers = textBox1.Text.Split(',');




--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.