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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как динамически менять параметры компоненты, после динамического добавления на форме 
:(
    Опции темы
sedoy
Дата 12.4.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня на форме есть несколько объектов - button, comboBox и Lable. 
В запущенном приложении - клацая мышкой по одному из этих объектов у
меня динамически создается еще один такойже.

Как сделать, чтобы динамически созданные объекты можно было 
перемещать или изменять их размеры (в ходе выполнения приложения)?
Чтоб получилось, как при проектировании интерфейса пользователя
(берем компонент, бросаем его на форму и проектируем его размеры и 
координаты).
PM MAIL   Вверх
marcusmae
Дата 12.4.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Цитата(sedoy @  12.4.2008,  14:50 Найти цитируемый пост)
Чтоб получилось, как при проектировании интерфейса пользователя(берем компонент, бросаем его на форму и проектируем его размеры и координаты).


Сначала нужно понять как работает дизайнер. Вкратце так : сначала он создаёт контролы, потом задаёт требуемым образом их свойства, и в конце добавляет на форму (см. файл Form1.Designer.cs в проекте). Контрол может быть отображен после того, как он попал в коллекцию контролов формы :

Код

Control control = new Control();
control.Name="MyControl";
...

this.Constrols.Add(control);


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

Код

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

namespace TimeButton
{
    public partial class Form1 : Form
    {
        const int updatingInterval = 1000; // every second.

        public string TimeString
        {
            get
            {
                DateTime now = DateTime.Now;
                return String.Format("{0:D2}:{1:D2}:{2:D2}",
                    now.Hour, now.Minute, now.Second);
            }
        }

        public Form1()
        {
            InitializeComponent();

            Button button = new Button();
            button.Text = this.TimeString;
            button.Name = "MyButton";
            this.Controls.Add(button);

            System.Timers.Timer timer = 
                new System.Timers.Timer(Form1.updatingInterval);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            timer.Start();
        }

        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Button button = (Button)this.Controls["MyButton"];
            if (button.InvokeRequired)
                button.Invoke(new System.Timers.ElapsedEventHandler(
                    this.timer_Elapsed), sender, e);
            else
                button.Text = this.TimeString;
        }
    }
}



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
vponomarov
Дата 12.4.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



sedoy, как я вижу, решение твоей задачи этопосле добавления контрола на форму (это ты умеешь как я понял) переназначить его реакцию на разные события.
простейший пример - реализовать перетаскивание объектов. пишешь обработчики событий MouseDown и MouseMove (если нужно пример, могу помочь, но там сложностей никаких нет). прикол в том, что у всех конторов есть общий набор свойств т.к. они являются потомками Control.
т.е. обработчик перетаскивания для всех контролов может быть одинаковым:
Код

Control c=(Contorl)sender;
c.Location=new Point(x,y);

аналогично можно и изменение размера реализовать.
идея понятна?


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

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


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

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


 




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


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

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