2012-03-22 7 views
2

私はFormクラスwinformで「保護レベルのためにアクセスできない」エラーを修正するにはどうすればよいですか?

partial class ProgressMainForm : Form 
    { 
     public ProgressMainForm() 
     { 
     InitializeComponent(); 
     } 
    } 

そして、そのクラスを使用して、ユーザー

public class ProgressForm 
    { 
     public ProgressMainForm myProgressForm; 

     public ProgressForm(string title) 
     { 
      myProgressForm = new ProgressMainForm(); 
      myProgressForm.Text = title; 
     } 

     public void SetProgressBar(int min, int max) 
     { 
     .... 
    } 

私は、この

のように私のプロジェクトでは、このProgressFormクラスを使用するためのすべての機能が含まれているクラスを持っています
  progresswindow = new ProgressForm("Replacing All Strings"); 

このようにprogresswindowには、ProgressFormの機能に関連するメンバーのみが含まれていますそれらのフォームメンバーはユーザーから隠されています。

しかし、時には私はInvokeメソッドが必要なときなど、それらのフォームメンバーにアクセスする必要があります。

ProgressMainFormを公開せずにProgressFormmyProgressFormをアクセスさせる方法はありますか?

このアプローチは間違っていますか?

答えて

2

私の意見では、フォームを直接使用しないでください。あなたの設定を正しく読んでいれば、何らかのジョブが実行されている間に進捗インジケーターを表示したいと思っています。 ProgressFormは、カウンタを設定してインクリメントするメソッドを公開する必要があります。別のスレッドで実行する場合は、ProgressFormのメソッドの内部からフォームの操作を行う必要があります。あなたの呼び出しは、適切な方法でラップされて、そこに属しています。 ProgressMainFormのいくつかのビジュアルプロパティを変更したい場合は、これらのプロパティをProgressFormにリレーします。

再開するには、ProgressFormが進行状況の境界を設定し、開始し、現在の割合を設定し、停止する以外に、呼び出しコードには何の手がかりもないはずです。このように、アプリケーションを別のUIシステムに移植するように求められた場合、変更する必要があるコード量が大幅に削減されます。

0

メソッドをinternalと宣言できます。これにより、アセンブリ内からメソッドを呼び出すことができます。

+1

私は彼が彼のProgressFormで公開されるフォームのメソッドをマークしたいと思うと思います。内部フォームは明らかにWinFormsコードを変更する必要があるため動作しません。 – dowhilefor

2

ProgressMainFormを公開せずにProgressFormのmyProgressFormをユーザーがアクセスできるようにする方法はありますか?

はい、あなたはProgressMainFormの特定のプロパティを公開ProgressFormにいくつかのパブリックプロパティを作成することができます。読み取り専用プロパティの場合

private ProgressMainForm myProgressForm; 

public int SomeProperty 
{ 
    get { return myProgressForm.IntProp; } 
    set { myProgressForm.IntProp = value; } 
} 

setを省略し、参照型であるあらゆるタイプのために、あなたは(クライアントがそれを変更することはできません確実にするために)クローンまたはコピーを返すようにしたいことがあります。

2

必要なメソッドをラップまたは公開してください。しかし、どういうわけか私はこのアプローチが嫌いです。アクセスを制限することは悪い考えではありませんが、このような抽象化の目的ではありません。 acessを制限するのではなく、簡単にするようにしてください。

関連する問題