Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Microsoft .NET

  Все выпуски  

RFpro.ru: Microsoft .NET


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Micren
Статус: Бакалавр
Рейтинг: 779
∙ повысить рейтинг »
Серг aka umbSSE
Статус: 10-й класс
Рейтинг: 289
∙ повысить рейтинг »
Evgenijm
Статус: 10-й класс
Рейтинг: 250
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Microsoft .NET : C#

Номер выпуска:163
Дата выхода:04.09.2009, 23:05
Администратор рассылки:Alexey G. Gladenyuk, Управляющий
Подписчиков / экспертов:311 / 56
Вопросов / ответов:1 / 3

Вопрос № 171760: Добрый вечер Уважаемые эксперты. Программирую на Visual C# 2008 приложение Windows form appilication. Как сделать так чтобы при нажатии на кнопку, размещеную в форме выскакивало окно, в которое можно было бы поместить еще пару полей куда вписывали...



Вопрос № 171760:

Добрый вечер Уважаемые эксперты. Программирую на Visual C# 2008 приложение Windows form appilication.
Как сделать так чтобы при нажатии на кнопку, размещеную в форме выскакивало окно, в которое можно было бы поместить еще пару полей куда вписывались бы значения и эти значения возвращались в главную форму. Или же наример просто, чтобы не значения а можно было бы выбрать в этом окне, например, фон главной формы и т д. Как организовать выбор знаю. Не знаю как организовать создание этого нового окна, и сохранение данных с него. И чтобы при нажатии одной из кнопок на нем оно сохраняло все и закрывалось. А приложение продолжало работать. Заранее спасибо.

Отправлен: 30.08.2009, 22:52
Вопрос задал: Dimon4ik, 3-й класс
Всего ответов: 3
Страница вопроса »


Отвечает Дегтярев Антон Александрович, 5-й класс :
Здравствуйте, Dimon4ik.
По поводу 1ого вопроса "Как сделать так чтобы при нажатии на кнопку, размещеную в форме выскакивало окно", не понятно в чём проблема:
Создаёте ещё одну форму:
1. В Solution Explorer нажмите правой кнопкой мыши на проекте
2. В ниспадающем меню выберите Add
3. В открывшемся меню выберите Windows Form.
Накидайте компонентов как вам нужно.
Далее в Первой форме опишите событие при нажатии нужной кнопки.

По поводу 2ого вопроса "чтобы при нажатии одной из кнопок на нем оно сохраняло все и закрывалось"
Я вижу 2 способа:
1. Создать структуру на главной форме приложения и наполнять её из 2ой формы
2. 2ое создать структуру во 2ой форме наполнять её по мере заполнения данных во 2ой форме, а потом передавать данные из структуры в нужные места 1ой формы.

В приложении приведу оба способа: Пример со строкой.

Вот вроде и всё.

Приложение:

Ответ отправил: Дегтярев Антон Александрович, 5-й класс
Ответ отправлен: 31.08.2009, 12:55

Оценка ответа: 5
Комментарий к оценке:
Спасибо. Так и ничего не получилось у меня. Но я еще позанимаюсь. Вдруг прояснится.

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253722 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Micren, Бакалавр :
    Здравствуйте, Dimon4ik.
    Есть различные способы передачи данных между объектами. В примере Вы увидите привязку данных и передачу через общедоступное свойство.

    MainForm:

    Код:

    public partial class MainForm : Form
    {
    public MainForm()
    {
    InitializeComponent();

    backgroundForm = new BackgroundForm();
    backgroundForm.Owner = this;
    backgroundForm.Ok_Click += new EventHandler(backgroundForm_Ok_Click);
    }

    void backgroundForm_Ok_Click(object sender, EventArgs e)
    {
    BackColor = backgroundForm.ColorChoice.ColorRGB;
    }

    readonly BackgroundForm backgroundForm;

    private void backgroundButton_Click(object sender, EventArgs e)
    {
    backgroundForm.ColorChoice = BackColor;
    backgroundForm.ShowDialog();
    }
    }


    BackgroundForm:
    Код:

    public partial class BackgroundForm : Form
    {
    public BackgroundForm()
    {
    InitializeComponent();
    SetBindings();
    }

    private void SetBindings()
    {
    // Делаем привязку
    redBar.DataBindings.Add("Value", ColorChoice, "Red", false, DataSourceUpdateMode.OnPropertyChanged);
    greenBar.DataBindings.Add("Value", ColorChoice, "Green", false, DataSourceUpdateMode.OnProp ertyChanged);
    blueBar.DataBindings.Add("Value", ColorChoice, "Blue", false, DataSourceUpdateMode.OnPropertyChanged);
    }

    ColorData savedColor;
    ColorData colorChoice = new ColorData();
    public ColorData ColorChoice
    {
    get { return colorChoice; }
    set
    {
    colorChoice.Red = value.Red;
    colorChoice.Green = value.Green;
    colorChoice.Blue = value.Blue;
    }
    }

    private void okButton_Click(object sender, EventArgs e)
    {
    if (Ok_Click != null)
    {
    Ok_Click(this, new EventArgs());
    }
    }

    public event EventHandler Ok_Click;

    private void cancelButton_Click(object sender, EventArgs e)
    {
    ColorChoice = savedColor;
    }

    private void BackgroundForm_Shown(object sender, EventArgs e)
    {
    savedColor = (ColorData)colorChoice.Clone();
    }
    }


    ColorData:
    Код:

    public class ColorData : INotifyPropertyChanged, ICloneable
    {
    byte red;
    public byte Red
    {
    get { return red; }
    set
    {
    if (red != value)
    {
    red = value;
    OnPropertyChanged("Red");
    }
    }
    }

    byte green;
    public byte Green
    {
    get { return green; }
    set
    {
    if (green != value)
    {
    green = value;
    OnPropertyChanged("Gr een");
    }
    }
    }

    byte blue;
    public byte Blue
    {
    get { return blue; }
    set
    {
    if (blue != value)
    {
    blue = value;
    OnPropertyChanged("Blue");
    }
    }
    }

    public Color ColorRGB
    {
    get
    {
    return Color.FromArgb(Red, Green, Blue);
    }
    }

    public static implicit operator ColorData(Color color)
    {
    return new ColorData(color);
    }

    public ColorData(byte red, byte green, byte blue)
    {
    Red = red;
    Green = green;
    Blue = blue;
    }

    public ColorData(Color color)
    : this(color.R, color.G, color .B)
    { }

    public ColorData()
    { }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
    if (PropertyChanged != null)
    {
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    }

    #endregion

    #region ICloneable Members

    public object Clone()
    {
    ColorData result = new ColorData(Red, Green, Blue);
    result.PropertyChanged = (PropertyChangedEventHandler)PropertyChanged.Clone();
    return result;
    }

    #endregion
    }


    Проект можно скачать здесь:
    http://rapidshare.com/files/273799028/171760.zip< /a>

    Ответ отправил: Micren, Бакалавр
    Ответ отправлен: 31.08.2009, 14:54

    Оценка ответа: 5
    Комментарий к оценке:
    Спасибо большое за решение задачи, за написание примеров, за оптимизацию моей программы и за файлы проектов.

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253724 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Evgenijm, 10-й класс :
    Здравствуйте, Dimon4ik.

    1 Когда очень много контролов со схожими функциями, старайтесь писать для них общий обработчик. Это помогает сконцентрироваться и отпадает необходимость вносить изменения сразу в 9 функций. Для первого из них создается обработчик двойным щелчком, меняется имя на более общее, а потом у каждого контрола выбирается эта функция в выпадающем списке.
    2 Давайте говорящие имена. При нумерации, она тоже должна вносить ясность, а не запутывать. Я пронумеровал контролы, чтобы они соответствовали координатам на поле.
    3 Я убрал панели под лейблами - так проще код. Правда, тени так отбрасываются в другую сторону.

    Поле теперь - массив 3х3. Для сброса игры вызывайте функцию ReInit. Проверку после хода реализуйте сами. С таким полем ее проще сделать.

    Я добавил диалог и кнопку для демонстрации техники. Внутри диалога используется еще стандартный ColorDialog. Как видите, ничего безумно сложного. Просто открытое поле или свойство. Для тексто вого свойства я еще применил одностороннюю привязку к данным. Не забудьте потом убрать диалог, кнопку и ее обработчик из проекта.

    В моем коде все равно есть несколько сомнительных моментов, но для маленького проекта это не страшно.

    http://rapidshare.com/files/274698746/GAME.rar.html

    Ответ отправил: Evgenijm, 10-й класс
    Ответ отправлен: 02.09.2009, 17:58

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 253793 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.8 от 28.08.2009

    В избранное