Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > возможно ли узнать координаты клика на форме?


Автор: beyond11 13.1.2008, 17:23
есть 2 вопроса. вернее 3.

вопрос первый - как узнать координаты клика на форме? объясняю ситуацию - есть куча квадратиков, по нажатии на каждый из них, именно он должен закрашиваться в определенный выбранный цвет. квадратики я нарисовал, осиалось выяснить, как узнать где именно на форме я кликнул, тогда проблема решена. можно конечно сделать для каждого квадратика свой pictureBox, но квадратиков 100, а 100 объектов на форму цеплять не хочется. помогите если кто знает 

вопрос 2 - как переделать типа Brush в тип Color, и обратно? дело в том что если рисовать прямоугольник DrawRectangle, то для задания цвета линии используется тип Color, но мне нужны закрашенные прямоугольники, для этого надо использовать FillRectangle (закрашенный прямоугольник), а он для закрашивания требует тип Brush. 
может есть ещё какие-то варианты, с помощью которых можно нарисовать закрашенный квадрат с цветом типа Color?

вопрос 3 - допустим у меня есть переменная типа Color, как я могу сохранить её значение в файл, а потом загрузить и поместить его обратно в переменную? (могу сохранить в текстовый файл, но как это сделать? и как потом обратно переделать в переменную типа Color?), (например значение Color::Blue)

Автор: bogys 13.1.2008, 17:34
1) 
.....   
      Rectangle  rectangl = new Rectangle(......);
....
       в обработчике какомто MouseUp, MouseDown....
        Point mousePT = new Point(e.X, e.Y);
         if (rectangl.Contains(mousePT))   // знач попали в квадрат


3) Цвет можна  и так получить:  Color cl = Color.FromArgb(50, 0, 0, 255);  а цыфры уже легко сохранять в файле

Автор: beyond11 13.1.2008, 18:03
Цитата(bogys @ 13.1.2008,  17:34)
3) Цвет можна  и так получить:  Color cl = Color.FromArgb(50, 0, 0, 255);  а цыфры уже легко сохранять в файле

легко.
это да.
но я забыл сказать, что цвет должен выбираться посредством ColorDialog, а он выдаёт цвет типа Color

Автор: bogys 13.1.2008, 18:41
Цитата(beyond11 @  13.1.2008,  18:03 Найти цитируемый пост)
но я забыл сказать, что цвет должен выбираться посредством ColorDialog, а он выдаёт цвет типа Color


Color cl = сolorDialog.Color;

испоьзуй свойства 
cl.A
cl.R
cl.G
cl.B

Автор: 1stain 13.1.2008, 18:50
bogys, а позвольте узнать, каким образом Вы предлагаете сохранять в файл составляющие цвета?

Автор: bogys 13.1.2008, 19:10
Цитата(1stain @  13.1.2008,  18:50 Найти цитируемый пост)
bogys, а позвольте узнать, каким образом Вы предлагаете сохранять в файл составляющие цвета?


предлагая сохранять значения, которые отвечают за оттенок цвета,  просто 4 числа 
Или что Вы имели введу?

Автор: 1stain 13.1.2008, 19:49
я имел ввиду, что все классы и структуры из фреймверка, которые помечены атрибутом Serializable, можно сохранять непосредственно.
Код

        Color c = Color.Indigo;
        System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
        using (Stream stream = new FileStream("test.sav", FileMode.OpenOrCreate, FileAccess.Write))
        {
            formatter.Serialize(stream, c);
        }

        Color cc;
        using (Stream stream = new FileStream("test.sav", FileMode.Open, FileAccess.Read))
        {
            cc = (Color)formatter.Deserialize(stream);
        }

Автор: bogys 13.1.2008, 20:48
Чувствовал, что есть какой-то оригинальный способ....

1stain, спасибо, теперь буду знать.

Автор: beyond11 14.1.2008, 15:49
всем спасибо))
с координатами клика разобрался, с цветом тоже, с Brush/Color разобрался...

есть новая проблема:
как сделать массив переменных типа Color, размером к примеру 10 на 10 ?
как его объявлять? вообще не пойму.
Color colors[10][10]; - ругается..
Код

error C2728: 'System::Drawing::Color' : a native array cannot contain this managed type
        Did you mean 'array<System::Drawing::Color>'?

Color* colors[10][10]; - не ругается, но когда задаю цвет из этого массива как цвет линии, пишет что не может переконвертировать из System::Drawing::Color* в System::Drawing::Color

честно говоря, вообще не въезжаю пока что значит этот символ - *, но важно не это
если кто знает как праильно создать этот массив, подскажите плиз.

Автор: mr.DUDA 14.1.2008, 20:25

M
mr.DUDA
Одна тема - один вопрос с уточнениями, если до конца не понятно. Тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)