0

私は非常に複雑なプロジェクトに取り組んでおり、windows プロジェクトには非常に慣れていません。
私は2つのフォームを持っています:

  • ViewSchedule.cs
  • Scheduler.cs(ダイアログフォームです)

ViewSchedule.csカレンダーから選択する 2 つの日付があります。2 つの日付が選択されます。
それらは Resp に保存されます。

_fromDate = dtFromDate.DateTime.ToUniversalTime();
_toDate = dtToDate.DateTime.ToUniversalTime();

フォーム 2 すなわちScheduler.cs、dialogForm です。で選択した日付ViewSchedulerがここに表示されます。

私は助けが必要です。

4

4 に答える 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();
}
于 2012-11-01T21:26:01.233 に答える
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の値を更新してください。または、言及したsから値を取得するだけのプロパティを作成FromしてTo計算することもできます。繰り返しになりますが、基になるカレンダーの値が変更されたときにCalendar必ず起動してください。OnPropertyChangedを使用している場合は、そのイベントMonthCalendarをリッスンすることでこれを行うことができます。DateChanged

次に、コンストラクターパラメーターとしてaSchedulerを取り、そのイベント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聞くことになってしまうことです。PropertyChangedViewSchedule

于 2012-11-01T23:41:47.143 に答える
0

静的フィールドは気にしません...フォーム間で値をやり取りするこのタイプの質問には何度も回答されています...だから、私がそう答えた前の質問へのこのリンクです。2 つのフォームを作成し、getter/setter やイベントを介して値をやり取りする手順も含まれています。これがお役に立てば幸いです。

于 2012-11-02T00:32:41.163 に答える
0

最も簡単な方法は、2 つの日付を定義するこれら 2 つの変数がpublic static、他のフォームからアクセスできるようにすることです。値が変更された場合にのみ他のフォームを更新したい場合。次に、日付が変更されたかどうかを示すTimer2 番目の形式と 1 番目の形式のa を使用することをお勧めします。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

ありがとう、
これがお役に立てば幸いです:)

于 2012-11-01T21:42:24.620 に答える