dポイントプレゼントキャンペーン実施中!

とりあえずVB2005で作っています。(あとでC#あたりに切り替えも考えていますが)

NotifyIcon、ContextMenuStrip、ToolStripMenuItemあたりを利用して
システムトレイ周りを操作できるということは分かりました。
それを利用したい場合のフォームが複数存在した場合、毎度それを
貼り付けて作ってあげなきゃいけなそうで面倒という理由より、
既にそれをサポートしたFormをベースとするユーザーコントロールを
作ろうと思い立ちました。

そこでまず、NotifyIconをサポートさせようと考え、実際にはこんな感じです。
Property SystemTrayUsable() As Boolean - システムトレイの利用をするかどうか
ReadOnly Property Notify() As NotifyIcon - NotifyIconのプロパティ

デザイン上でシステムトレイを利用すると設定された場合に限り、Notify()より
NotifyIconオブジェクトを取得できて、NotifyIconの各種プロパティを
設定できる、ということを想定しています。

が、これを実現させようとすると、デザイン上では設定できるものの
Form1.Designer.vbの方ではNotifyIconのプロパティ設定に対するコードが
記載されない為、ビルドを行うと初期化されてしまいます。
(つまり、デザイン上で設定が出来るだけで、ビルドを行うとデザイン上で
設定した内容すら残らない)
多分、ビルドした瞬間にNotifyIconのインスタンスが消える関係で
そうなってしまうんだと思うんですが。

Form1.Designer.vbに直接
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.Notify.Icon = CType(resources.GetObject("NotifyIcon1.Icon"), System.Drawing.Icon)
Me.Notify.Text = "NotifyIcon1"
Me.Notify.Visible = True

といったコードを打ち込むと動作するので、何か方法があると思うのですが解決できません。
NotifyIconで指定できるプロパティを逐一全部自作して、内部的にNotifyIconのプロパティを操作してあげる、というのも手なのでしょうが、
NotifyIconの全てのプロパティ、メソッドを自作するというのはとても現実的では
ないので、八方塞がりになってしまいました。

どうするとデザイン上で設定したNotifyIconのプロパティが保持されるのでしょうか?

A 回答 (5件)

すいません#3では、できないですよね、


最初からインスタンスを生成しておけるならば、同時に設定を行うという方法で対処できないでしょうか?
http://homepage1.nifty.com/rucio/main/dotnet/sho …
    • good
    • 0

プロパティを外部ファイルに吐き出すこともできます。


http://dobon.net/vb/dotnet/programing/dynamicpro …
    • good
    • 0
この回答へのお礼

色々な対応方法を教えていただき、ありがとうございます。

私も何か一辺倒な作り方に固執していたような感があります。

教えていただいた方法を参考に、実現することが出来ました。

お礼日時:2009/01/29 19:32

作成するNotifyIcon = Form1.NotifyIcon1


ではだめなのですか?
    • good
    • 0

すいません質問の意図を正しく読み取れていませんでした。



コントロールの動的追加ができれば解決するのではないでしょうか?

参考URL:http://dobon.net/vb/dotnet/control/addcontrol.html

この回答への補足

実質的にコントロールの動的追加になるのかもしれませんが、
継承されたフォームをデザイン時に、No1の補足のような
コードが動作し、プロパティウィンドウにてシステムトレイを
利用すると設定された時に限りシステムトレイに関するプロパティが
変更可能になるということをしたいです。

で、それが仮に出来たとしても、現時点ではDesigner.vb側へ
システムトレイに関するプロパティのコードが反映されない為、
ビルドをすると、システムトレイに関するプロパティが全部初期状態に
戻ってしまうのです。

なんか、ファイル添付とか出来ればわかり易いんですけどね・・・。
文字だけだとなかなか・・・。

補足日時:2009/01/21 20:22
    • good
    • 0

クラス内にPublic宣言でNew Windows.Forms.NotifyIconを宣言しておけば、クラス名.NotifyIco

nの名前.プロパティとできるのではないですか?

この回答への補足

すみません、イメージが付きません・・・。

現在、Form1として以下のような感じです。
Private mSystemTrayUsable As Boolean = False
Private mNotify As NotifyIcon = Nothing

<Browsable(True), DefaultValue(False), Category("System Tray Support Property"), Description("システムトレイの利用を示します。")> _
Public Property SystemTrayUsable() As Boolean
  Get
    Return mSystemTray
  End Get
  Set(ByVal value As Boolean)
    mSystemTray = value
    If value Then
      mNotify = New NotifyIcon()
    Else
      mNotify = Nothing
    End If
   End Set
End Property

<Browsable(True), Category("System Tray Support Property"), Description("システムトレイを操作します。")> _
Public ReadOnly Property Notify() As NotifyIcon
  Get
    If mNotify Is Nothing Then
      Return Nothing
    End If
    Return mNotify
  End Get
End Property

これを継承元としたForm2のプロパティで、SystemTrayUsableプロパティを
Trueに設定すると初めてNotifyプロパティが操作できる、というイメージ
です。
(逆にFalseにすると設定が一切できない)
Notifyプロパティ自体はReadOnlyですが、そこから取得されるオブジェクト
の各プロパティ(BalloonTipTitleやIconなど)は設定もできる為、
継承先のForm2でそれらをいじったらForm2.Designer.vbでそれらが
質問にあるように書かれればいいんですけど・・・。

どこをどのようにすれば良いでしょうか?

補足日時:2009/01/16 23:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!