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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> копирование кнопок 
V
    Опции темы
maxutov
Дата 5.11.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 7.5.2006
Где: Люберцы

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



Здравствуйте, как 
скопировать одну переменную кнопки в другую
Код

Button^ but=gcnew Button();but=b;//b-это кнопка, но надо не присвоить а просто скопировать b в but
but->Top=5;





PM MAIL WWW   Вверх
Remember
Дата 5.11.2007, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Может, я конечно... что-то не понимаю... но мне кажется так...

Код

Button b1 = new Button();
Button b2 = new Button();

//Делаешь... с b1 всё что нужно...

b2 = b1; //поверхностная передача параметров


Это сообщение отредактировал(а) Remember - 5.11.2007, 21:28
PM MAIL   Вверх
maxutov
Дата 5.11.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 7.5.2006
Где: Люберцы

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



Цитата(Remember @ 5.11.2007,  21:25)
Может, я конечно... что-то не понимаю... но мне кажется так...

Код

Button b1 = new Button();
Button b2 = new Button();

//Делаешь... с b1 всё что нужно...

b2 = b1; //поверхностная передача параметров

в этом случае кнопка b пропадет
будет функционировать только but
PM MAIL WWW   Вверх
1stain
Дата 5.11.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



в С++ конструкторы копирования. В .NET - ICloneable.Clone() (глубокое копирование) и Object.MemberwiseClone()
в обоих случаях придецца создавать свой класс наследник Button для реализации возможности копирования.


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
maxutov
Дата 5.11.2007, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 7.5.2006
Где: Люберцы

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



Цитата(1stain @ 5.11.2007,  22:04)
в С++ конструкторы копирования. В .NET - ICloneable.Clone() (глубокое копирование) и Object.MemberwiseClone()
в обоих случаях придецца создавать свой класс наследник Button для реализации возможности копирования.

а как написать глобальную функцию 
например,

copy(b, but);?
PM MAIL WWW   Вверх
stab
Дата 5.11.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(maxutov @  6.11.2007,  02:11 Найти цитируемый пост)
а как написать глобальную функцию

никак. используйте статические методы.

Напоминаю:

Модератор: Пожалуйста, один топик - один вопрос.

Добавлено @ 22:18
.. упс, в C++ пожалуй это возможно smile

Добавлено @ 22:27
просто ручками содаём новую кнопку, из оригинала копируем, опять же ручками, всё, что логично скопировать - текст, размер, т.д . ICloneable, я так понимаю, лениво вам реализовывать, хотя по сути это тоже самое получится. Object.MemberwiseClone не пройдёт т.к. неизвестно на что там эта кнопка ссылается внутри, можно закопировать что-нибудь нужное для её функционирования и ненароком изменить.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
1stain
  Дата 6.11.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как вариант для поверхностного копирования
Код

    public static class ShallowXerox
    {
        private static MethodInfo memberwiseCloneMethodInfo;

        public static T GetShallowCopy<T>(T c, bool cloneIdentity) where T : MarshalByRefObject
        {
            memberwiseCloneMethodInfo = typeof(T).GetMethod("MemberwiseClone", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy, null, new Type[] { typeof(Boolean) }, null);
            return (T)memberwiseCloneMethodInfo.Invoke(c, new object[] { cloneIdentity });
        }
        public static T GetShallowCopy<T>(T c) where T : MarshalByRefObject
        {
            return GetShallowCopy<T>(c, false);
        }
    }

    static void Main(string[] args)
    {
        Button b = new Button();
        b.Text = "Preved";

        Button c = ShallowXerox.GetShallowCopy<Button>(b);
        Console.WriteLine( c.Text );
        Console.WriteLine(object.ReferenceEquals(b, c).ToString());
    }

вот только с поверхностным копированием, как сказал stab, можно напороцца на грабли. Так что, если хочецца "взаправду" копировать кнопку - через наследование ICloneable

з.ы. вот это <T> аналог шаблонов классов из плюсов. как сделать на ++ через шаблоны не знайю, как вариант вместо шаблонного метода, принимать Control и возвращать его же, а в клиенте приводить к нужному типу

Это сообщение отредактировал(а) 1stain - 6.11.2007, 16:07


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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