Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > WPF, UWP, WinRT, XAML
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 03.07.2013, 19:47   #1
pashka_dos
Форумчанин
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Адрес: Украина, Одесса
Сообщений: 83
Репутация: 10

skype: pashka_dos
Вопрос Более универсальный конструктор (C# WPF)

Доброго времени суток!

Есть 2 конструктора класса GameField.

Код:

class GameField
{
	private const int SIZE = 10;
	public Rectangle[,] Cells = new Rectangle[SIZE, SIZE];

	public GameField(MainWindow w)
	{
		for (int i = 0; i < SIZE; i++)
		{
			for (int j = 0; j < SIZE; j++)
			{
				Cells[i, j] = new Rectangle();
				Cells[i, j].Width = 500;
				Cells[i, j].Height = 500;
				Cells[i, j].Fill = new SolidColorBrush(Colors.Black);
				w.wrapPanel.Children.Add(Cells[i, j]);
			}
		}
	}

	public GameField(MainWindow w, Panel p)
	{
		for (int i = 0; i < SIZE; i++)
		{
			for (int j = 0; j < SIZE; j++)
			{
				Cells[i, j] = new Rectangle();
				Cells[i, j].Width = 500;
				Cells[i, j].Height = 500;
				Cells[i, j].Fill = new SolidColorBrush(Colors.Black);
				//w.p.Children.Add(Cells[i, j]); //здесь компилятор ругается
			}
		} 
	}
}

Первый конструктор принимает один параметр типа MainWindow и добавляет на контрол типа WrapPanel с именем wrapPanel прямоугольник
Код:

w.wrapPanel.Children.Add(Cells[i, j]);

Второй конструктор я хочу сделать более универсальным, добавив еще один параметр (p типа Panel), но что делать дальше не понимаю, так ведь нельзя писать
Код:

w.p.Children.Add(Cells[i, j]);

Может кто подскажет как мне быть?
pashka_dos вне форума   Ответить с цитированием
Старый 03.07.2013, 22:17   #2
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Адрес: г. Санкт-Петербург
Сообщений: 218
Репутация: 30

icq: 475465394
По умолчанию

ну да, он кажется и должен ругаться, первое, что надо изменить:
Код:

p.Children.Add(Cells[i, j]); //здесь компилятор ругается

вот так он должен кажется работать, вот пример с майкрософта
Olejik вне форума   Ответить с цитированием
Старый 04.07.2013, 03:23   #3
pashka_dos
Форумчанин
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Адрес: Украина, Одесса
Сообщений: 83
Репутация: 10

skype: pashka_dos
Вопрос

Цитата:
Сообщение от Olejik Посмотреть сообщение
ну да, он кажется и должен ругаться, первое, что надо изменить:
Код:

p.Children.Add(Cells[i, j]); //здесь компилятор ругается

вот так он должен кажется работать, вот пример с майкрософта
Спасибо, но Вы, наверное, меня не поняли, мне нужно чтобы в конструктор передавались 2 параметра Window и Panel, Panel должен лежать на Window (у Window нету метода Children.Add()). А на Panel, в свою очередь, должны отрисовываться прямоугольники.
pashka_dos вне форума   Ответить с цитированием
Старый 04.07.2013, 06:37   #4
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Адрес: г. Санкт-Петербург
Сообщений: 218
Репутация: 30

icq: 475465394
По умолчанию

а, ну тогда сначало Вам надо добавить в панель чилдрена (вот этого я не знаю, погуглить надо, я еще посмотрю, может у меня в проектах есть), а потом уже в Window
так:
Код:

public GameField(MainWindow w, Panel p)
	{
		for (int i = 0; i < SIZE; i++)
		{
			for (int j = 0; j < SIZE; j++)
			{
				Cells[i, j] = new Rectangle();
				Cells[i, j].Width = 500;
				Cells[i, j].Height = 500;
				Cells[i, j].Fill = new SolidColorBrush(Colors.Black);
				p.Children.Add(Cells[i, j]); //добавляем в панель
			}
		} 
w.Children.Add(p); //добавляем в window панель
	}

еще посмотрите, про StackPanel, там кажется есть добавление чилдренов, может Вам и пригодится
Olejik вне форума   Ответить с цитированием
Старый 04.07.2013, 08:58   #5
Luuzuk
Участник клуба
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Адрес: Самара
Сообщений: 975
Репутация: 605

icq: З7ЧЗЗ89Ч5
По умолчанию

Цитата:
w.Children.Add(p)
w.Content = p;

у окна нет свойства Children, т.к. оно не является наследником Panel
Один минус: окну можно задать Content лишь единожды
__________________
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума   Ответить с цитированием
Старый 04.07.2013, 09:44   #6
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Адрес: г. Санкт-Петербург
Сообщений: 218
Репутация: 30

icq: 475465394
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
w.Content = p;

у окна нет свойства Children, т.к. оно не является наследником Panel
Один минус: окну можно задать Content лишь единожды
да...тогда надо работать с гридом, в окне должен быть грид, выцепить этот грид и туда уже добавлять это все как угодно
Olejik вне форума   Ответить с цитированием
Старый 04.07.2013, 11:06   #7
Luuzuk
Участник клуба
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Адрес: Самара
Сообщений: 975
Репутация: 605

icq: З7ЧЗЗ89Ч5
По умолчанию

На 84,39% уверен, что задачу можно и нужно решить другим путем, но топикстартер не ввел нас в суть разрабатываемой программы)
__________________
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума   Ответить с цитированием
Старый 04.07.2013, 11:13   #8
Olejik
Форумчанин
 
Регистрация: 02.06.2009
Адрес: г. Санкт-Петербург
Сообщений: 218
Репутация: 30

icq: 475465394
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
На 84,39% уверен, что задачу можно и нужно решить другим путем, но топикстартер не ввел нас в суть разрабатываемой программы)
да уж что там мелочиться, можно натянуть и до 90-95%
я росто с таким сталкивался и, например имея грид, придавал ему имя, потом добавлял туда элементы (на уровне XAML), но в будущем, если необходимо было добавить туда textbox в ходе работы программы, я его создавал в коде, придавал ему по-моему имя, значения, ну все, что необходимо и уже добавлял к grid и прокатывало. Криво, противно, не камильфо в общем. Вообще должен быть метод менее изощренный, но его я пока не нашел, как говорится: плохо я гуглил
Olejik вне форума   Ответить с цитированием
Старый 04.07.2013, 16:41   #9
pashka_dos
Форумчанин
 
Аватар для pashka_dos
 
Регистрация: 19.11.2011
Адрес: Украина, Одесса
Сообщений: 83
Репутация: 10

skype: pashka_dos
По умолчанию

Цитата:
Сообщение от Luuzuk Посмотреть сообщение
w.Content = p;

у окна нет свойства Children, т.к. оно не является наследником Panel
Один минус: окну можно задать Content лишь единожды
Спасибо всем за ответы)
pashka_dos вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C# + WPF] Отлов нажатий клавиш, хуки, горячие клавиши в проекте WPF Casper-SC WPF, UWP, WinRT, XAML 3 03.03.2017 16:00
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01
класс Screen в WPF. Есть ли такой? [?] Не добавлять же сборку Forms в WPF Casper-SC Общие вопросы .NET 2 30.07.2010 15:10
Проблемы с отображением WPF форм. Конструктор вообще не открывается Casper-SC Общие вопросы .NET 1 15.03.2010 00:38
Какое программирование в наше время более востребовано и более рентабельно? iukash Свободное общение 18 29.10.2009 14:02


08:11.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru