Передача значения даты из одной Windows From в другую форму в C #
1528 просмотра
4 ответа
Я работаю над очень сложным проектом, и я очень новичок в Windows Project.
У меня есть 2 формы:
ViewSchedule.cs
Scheduler.cs
(это диалоговая форма)
ViewSchedule.cs
имеет две даты для выбора из календаря. Две даты выбраны.
Они сохраняются в Resp:
_fromDate = dtFromDate.DateTime.ToUniversalTime();
_toDate = dtToDate.DateTime.ToUniversalTime();
Форма 2, то Scheduler.cs
есть является dialogForm. Здесь ViewScheduler
должны отображаться даты, выбранные в .
Мне нужна помощь.
Автор: user1141927 Источник Размещён: 13.11.2019 11:51Ответы (4)
1 плюс
Вам необходимо создать открытые свойства в диалоговой форме и установить эти свойства перед отображением диалога.
Затем onLoad использует эти значения свойств.
В form2 добавьте эти свойства даты:
public partial class Form2 : Form
{
public DateTime Date1 { get; set; }
public DateTime Date2 { get; set; }
public Form2()
{
InitializeComponent();
}
}
И из form1 доступ к ним выглядит следующим образом:
private void Form1_Load(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Date1 = DateTime.Now;
frm2.Date2 = DateTime.Now;
frm2.ShowDialog();
}
Автор: nilobarp
Размещён: 01.11.2012 09:26
0 плюса
Самый простой способ - убедиться, что эти две переменные, которые определяют две даты, доступны public static
для них через другую форму. Если вы хотите обновить другую форму, только если изменилось значение. Затем я бы предложил вам иметь Timer
во второй форме и bool
в первой форме указывать, изменилась ли дата или нет.
пример
ViewSchedule.cs
//These values must be static and public so that they'd be accessible through the second form
public static bool DateChanged = false;
public static DateTime _fromDate;
public static DateTime _toDate;
private void SetValues()
{
_fromDate = dtFromDate.DateTime.ToUniversalTime();
_toDate = dtToDate.DateTime.ToUniversalTime();
DateChanged = true; //Set DateChanged to true to indicate that there has been a change made recently
}
Scheduler.cs
public Scheduler()
{
InitializeComponent();
timer1.Tick += new EventHandler(timer1_Tick); //Link the Tick event of timer1 to timer1_Tick
}
DateTime _fromDate; //Set a new variable of name _fromDate which will be used to get the _fromDate value of ViewSchedule.cs
DateTime _toDate; ////Set a new variable of name _toDate which will be used to get the _toDate value of ViewSchedule.cs
private void timer1_Tick(object sender, EventArgs e)
{
if (Form1.DateChanged) //Check if a change has been done recently
{
Form1.DateChanged = false; //Set the change to false so that the timer won't repeat
_fromDate = Form1._fromDate; //Set our value of _fromDate from Form1._fromDate
_toDate = Form1._toDate;//Set our value of _toDate from Form1._toDate
}
}
Это установит Scheduler.cs
новые значения, от ViewSchedule.cs
которых я думаю, что вы хотели бы достичь
Спасибо,
надеюсь, вы найдете это полезным :)
0 плюса
Вы должны предоставить Scheduler
явный источник данных и использовать события, чтобы уведомить его об изменениях в базовых датах. Хорошей идеей было бы дать источнику данных собственный интерфейс:
interface IFromToDateProvider : INotifyPropertyChanged
{
DateTime From { get; }
DateTime To { get; }
}
Затем необходимо ViewSchedule
реализовать этот интерфейс:
class ViewSchedule : IFromToDateProvider
{
DateTime _from;
public DateTime From
{
get { return _from; }
set
{
if (_from == value) return;
_from = value;
OnPropertyChanged("From");
}
}
DateTime _to;
public DateTime To
{
get { return _to; }
set
{
if (_to == value) return;
_to = value;
OnPropertyChanged("To");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Обязательно обновите значения from и to, используя свойства, чтобы событие было запущено. Кроме того, вы можете создавать From
и To
вычислять свойства, которые просто извлекают значения из упомянутых Calendar
вами s; еще раз, убедитесь, что срабатывает OnPropertyChanged
при изменении значений основного календаря. Если вы используете MonthCalendar
, вы можете сделать это, слушая его DateChanged
событие .
Затем, Scheduler
сделайте IFromToDateProvider
так , чтобы ваш параметр воспринимался как конструктор и слушал его PropertyChanged
событие:
class Scheduler
{
readonly IFromToDateProvider _provider;
public Scheduler(IFromToDateProvider provider)
{
_provider = provider;
_provider.PropertyChanged += provider_PropertyChanged;
}
void provider_PropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
// update display with new values in _provider.From and/or
// _provider.To in this event handler
}
}
Это предполагает, что ViewSchedule
создает Scheduler
экземпляр. Если это наоборот, просто Scheduler
прослушайте событие после того, как оно создаст ViewSchedule
. Если нет, просто установите его как свойство; важная часть заключается в том, что вы в конечном итоге Scheduler
слушаете PropertyChanged
событие а ViewSchedule
.
0 плюса
Я не стал бы беспокоиться о статических полях ... На этот тип вопроса о передаче значений между формами многократно отвечали ... Так что это ссылка на предыдущий вопрос, на который я так ответил. В нем даже есть пошаговое руководство по созданию двух форм и получению значений, передаваемых взад-вперед через геттер / сеттер и даже события. Надеюсь, что это помогает вам.
Автор: DRapp Размещён: 02.11.2012 12:32Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- c# Setting Objects to Null/Nothing after use in .NET
- c# Конвертировать целые числа в записанные числа
- c# Почему я не могу иметь абстрактные статические методы в C #?
- c# Как я могу оценить код C # динамически?
- winforms Как заставить кнопку выглядеть так, как будто она нажата?
- winforms Лучший способ получить доступ к элементу управления в другой форме в Windows Forms?
- winforms Можете ли вы использовать общие формы в C #?
- winforms Как отключить Alt + F4 закрытие формы?
- winforms Привязка данных WinForms и отношения внешних ключей
- winforms Вставить файл Chooser в UserControl / Form
- winforms Одиночная форма Скрыть при запуске
- winforms Блокирование диалогов в элементе управления .NET WebBrowser
- winforms DataGridViewComboBoxColumn добавляет разные элементы в каждую строку.
- winforms Создание WinForms TextBox ведет себя как адресная строка вашего браузера