2009-08-24 8 views
0

は、私がこれを行うが、私は私のコントロールを暴露し、プライベートそれを維持することなく、必要な特定の作業を行うだろう公共の方法を選んだことができないことを理解しています。だから私は単純なdsicreteセットと操作を取得するためにアクセスしたいコントロールの特定のプロパティを公開することによって私は公共のプロパティを介してうまくいいです。WinFormコントロールを呼び出し元クラス、WinFormにも公開しますか?

URL:Unable to access Winforms control in a class

「また、あなたのコントロールが公開され、またはより良い間接的にコントロールを操作するために使用することができますフォームにパブリックメソッドを追加していることを確認してください。」

上記の引用符は私にはあまり意味がありません...私の呼び出しクラスである別のwinformクラスの中からターゲットクラスのコントロールとメンバーを見ることができない場合、私は完全に理解できません。間違っている? =(

どちらのアプローチが実りされている....私の標的化さ制御がプライベートで、私の公開されたプロパティが公開されていると私の公開方法も公開されては、私が間違って何をやっている.... ????スレッドはありませんでしたハードこのように...「:?」@#$%!!!

*******私は馬鹿であること午前包みなどを通じて、可能な限りしてください!!!

答えて

0

あなたキープフォームの外からフォーム上のコントロールを直接操作することはできません。

So.

たとえば、フォーム上のコントロールを無効にしたい場合は、次のようなコードを書きたいでしょう:

form.DisableSomeControls(); 
// Do some work. 
form.EnableSomeControls(); 

あなたは少し、このように、これらのメソッドを実装したい:

class MyForm : Form 
{ 
    public void DisableSomeControls() 
    { 
     this.textbox1.Enabled = false; 
     this.btnOK.Enabled = false; 
    } 
} 

私はあなたを期待しますアイデアを得る。

0

アイデアは、フォームが提供する機能の実装を隠すことです。あなたは、テキストボックスコントロール、例えば、またはWINDOWTITLEを持っている、とあなたは、発信者によって設定された値をしたい場合は、それが間接的にインスタンス化し、フォームのプロパティまたはメソッドもしそうを使用して値を設定する方が良いでしょう実装の変更、呼び出しルーチンしません。

だから、呼び出し元のフォームには、ターゲット・フォームのインスタンスを作成し、友人/パブリックプロパティやメソッドを使用して、それを変更します。

Public Class frmCaller 
Private WithEvents _edit As frmEdit 

Private Sub editCell() 
    If _edit Is Nothing Then 
     _edit = New frmEdit 
     _edit.MdiParent = Me.MdiParent 
    End If 
    _edit.init<params>) 
    If Not _edit.isNothing Then 
     _edit.Show() 
     _edit.WindowState = FormWindowState.Maximized 
     _edit.BringToFront() 
    End If 
End Sub 

パブリック・クラスfrmEdit 友達サブのinit()の返信用

0

感謝。私はあなたが説明するように実装しました。私のターゲットとなるクラスは公開されており、そのコントロールはプライベートで、私はいくつかのプロパティとメソッドを公開してくれています。問題は、呼び出し側クラスでクラスを内部からインスタンス化するときです。intellisenseはFORM関連のメンバー以外は表示せず、クラスのメンバーは表示しません。それが私が一貫して転倒している場所です。私はコールクラスの中でクラスをインスタンス化した後、確かに私が意図的に設定したプロパティとメソッドについて悩まされる機会があります。シングは、(

* =私はそれらを見ることができないです
関連する問題