- - PR -
カレンダーを使用した日付入力コントロールを自作したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-07-05 11:01
位置の事だけ。
#また妙な事を言ってたらごめんなさい。 | ||||
|
投稿日時: 2007-07-05 11:40
位置のことを書こうとしたら先を越されたので、サイズの件
VBに翻訳して下さい。 ちなみに、AutoSizeプロパティはFalseです。 | ||||
|
投稿日時: 2007-07-05 13:29
シュリさん、ありあがとうございます。
教えていただいた方法で無事テキストの下に表示させる事が出来ました。 勉強になりました。ありがとうございました。 イシバシさん、ありがとうございます。 アドバイスを頂くまで、とりあえずデザイン時にAutoSizeプロパティをFalseにして、 カレンダーのサイズを調べてFormも同じ大きさの数値を設定していたのですが、 そうですよね。コードで一応サイズ変更しておいたほうが良さそうですね。勉強になりました。ありがとうございました。 あとは、カレンダーフォームから呼び出し側のMaskedTextBoxの値を変えられれば完成なのですが・・・(泣)どなたか良い方法がありましたらご指導お願い致します。 | ||||
|
投稿日時: 2007-07-05 13:32
じゃんぬねっとさん、すみません!
皆さんからたくさんのコメントをつけて頂いて、じゃんぬねっとさんからもコメントを頂けていた事に気づいていませんでした; 今から頂いたコメントをゆっくり読んで、試してみます。 いつもありがとうございます。後ほどまた報告いたします。 | ||||
|
投稿日時: 2007-07-05 15:04
皆様、この度は本当にお世話になっております。
カレンダーの余白の問題は、無事解決しました。 デザイン時にAnchor プロパティ や Dock プロパティを設定した後、表示実行部分で frm.AutoSize = True frm.AutoSizeMode = Windows.Forms.AutoSizeMode.GrowAndShrink とし、カレンダーフォームのPaintイベントで Me.Width = Me.MonthCalendar1.Size.Width Me.Height = Me.MonthCalendar1.Size.Height とすることで、無事解決しました。 あとはカレンダーフォームから呼び出し側のMaskedTextBoxに値をセットする方法ですが、 実は、前回質問した際のソースの「SValue」は、自作したプロパティだったのです。 でも、やはり値をセットする事は出来ませんでした。 以下にプロパティのソースを記述します。 Public Property SValue() As String Get Return GetValue() End Get Set(ByVal value As String) MskDt.Text = value End Set End Property Private Function GetValue() As String Return MskDt.Text.Replace("/", "") End Function ※ちなみに、質問した際のこのプロパティはLong型だったのですが、 他の問題で発生しているエラー回避のために試行錯誤しているうちに、String型に変わりました; カレンダー側の処理も念のためもう一度記述します。 Private ParentCtrl As New EdDate Private Sub MonthCalendar1_DateChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged ParentCtrl.SValue = Format(MonthCalendar1.SelectionStart, "yyyyMMdd") Me.Close() End Sub 一応、単なるテキストボックスを配置し、そのテキストボックスのプロパティを作成した後、カレンダーフォーム側で TextBox1.Text = "OK" と表示させるのを試してみましたが、これも設定する事が出来ませんでした。 デバッグで追ってみると、 Set(ByVal value As String) MskDt.Text = value End Set の部分はちゃんと通っています。 何か呼び出し方が間違っていますでしょうか?本当にお手数をおかけして申し訳ないのですが、ご教授よろしくお願い致します。 | ||||
|
投稿日時: 2007-07-05 16:19
度々失礼します・・・・。
もうひとつ問題が出てきました(泣) カレンダーの日付をクリックされた際に、カレンダーフォームを閉じたいのですが、 MonthCalendar1_DateChanged でカレンダーフォームを閉じようとすると、 MonthCalendar1_DateChanged の End Sub のところでエラーとなってしまいます。 閉じる方法を Me.Close() Me.Hide() Me.Visible = False(苦肉の策で。frmCalendar_DeactivateでMe.Close()しているし、ということで) の3種類を試してみましたが、だめでした。 エラーの内容以下の通りです。 System.ObjectDisposedException はハンドルされませんでした。 Message="破棄されたオブジェクトにアクセスできません。\\r\\nオブジェクト名 'MonthCalendar' です。" Source="System.Windows.Forms" ObjectName="MonthCalendar" 別に閉じる関数を作ろうかとか色々考えましたけど、 そうやっても呼び出したところが MonthCalendar1_DateChanged イベントなら、 最終的に End Sub は通りますよね・・・。 この場合、どうしたらよろしいのでしょうか。 もし何かお心当たりのある方がいらっしゃいましたら、ご教授よろしくお願い致します。 ================================= <編集しました> 上記の問題について、苦肉の策でこのようなことをしました。 Private Sub MonthCalendar1_DateChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DateRangeEventArgs) Handles MonthCalendar1.DateChanged ParentCtrl.SValue = Format(MonthCalendar1.SelectionStart, "yyyyMMdd") Me.MonthCalendar1.Visible = False Me.Width = 0 Me.Height = 0 End Sub Private Sub frmCalendar_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate Me.Close() End Sub そして、カレンダーフォームのPaintイベントに記述していた Me.Width = Me.MonthCalendar1.Size.Width Me.Height = Me.MonthCalendar1.Size.Height を、Form_Load イベントに移動しました。 一応エラーにはならなくなりましたが・・・・。なんか「無理矢理」ですよね(泣) もしもっと良い方法をご存知の方がいらっしゃいましたらご教授よろしくお願い致します。 [ メッセージ編集済み 編集者: reiko 編集日時 2007-07-05 16:32 ] | ||||
|
投稿日時: 2007-07-05 17:17
ども。
なんだか、難しくやってますねぇ。 私の試した方法 1.ユーザーコントロール側に、Internalアクセス修飾子で文字列を受け取るメンバを作成。仮に名前を「DateString」とします。 2.カレンダー内包フォームのインスタンスに、ユーザーコントロールの参照を渡す。 仮にこれをPrivateな変数MyUcにでも格納します。 C#で書くとこんな感じ Form1 f = New Form1(this); 3.MonthCalendar1_DateChanged イベントで、MyUcのDateStringプロパティに MonthCalendar1で選択された日付のToString(編集)をセットし 4.Me.Close() 5.ユーザーコントロールのDateStringセッターではValueをテキストボックスにセット。 この他はシュリさんのレスにある位置についてと、私のレスのサイズについてのみで 他は一切やってませんが、ほぼスレ主さんの欲している機能は満たしていますよ。 [ メッセージ編集済み 編集者: イシバシ 編集日時 2007-07-05 17:23 ] | ||||
|
投稿日時: 2007-07-05 17:30
連投すいません。
気になってるんですが >Private ParentCtrl As New EdDate これってナンでしょう? カレンダーフォームを開くユーザーコントロール? New したら別モノですよ。 新しくインスタンス作成したユーザーコントロールに値をいくら渡しても、フォームを開いたほうのユーザーコントロールには反映しませんね。 追加 PaintイベントでMe.Width = ・・・とかやるのであれば、AutoSizeは意味無いと思いますが(というか、害あり?) |