2017-05-20 1 views
-1

ユーザーがVisual Studioフォームのウィンドウを作成する大きさに応じてオブジェクトの幅を変更したいとします。私が持っているコードは次のとおりです。フォームの幅にアクセスする方法

webBrowser1.Width = Form1.Width - 42; 

およびVisual Studioは

+0

Form1はタイプであり、webBrowser1のような変数ではありません。確かにあなたは 'this.ClientSize.Width'を意味しました –

+0

ありがとう!エラーは消えました!私はそのコードをどこに置くべきか分かりません。 –

答えて

0

WidthForm1クラスのインスタンスのメンバーである「オブジェクト参照が非静的フィールド、メソッド、またはプロパティのために必要とされる」と言います。だから、このようForm1インスタンスを使用して、それを呼び出すことができます。

Form1 myForm = new Form1(); 
var newWidth1 = myForm.Width - 42 // Calling instance member from an instance - Correct 
var newWidth2 = Form1.Width - 42 // Calling instance member from a class - Incorrect 
+0

これを実装する方法がわかりません –

0

フォームの幅は、フォームの静的メンバーではないので、あなたは、フォームのインスタンスを通してそれを呼び出す必要があります。したがって、幅にアクセスするにはフォームのオブジェクトが実際に必要です。異なるサイズのフォームの複数のインスタンスを作成できるので、これは論理的です。実装のために


フォームはあなたのプログラムのいくつかの時点で開始されました。

new Form1().Show(); 

またはフォームは、それがProgram.csに開始されたのWinFormsアプリケーションのスタートアップフォームがある場合:だから、何が書いていたかもしれないことであるあなたが何ができるか

Application.Run(new Form1()); 

は、インスタンスを保存することです

var yourForm = new Form1(); 
yourForm.Show(); 

今、あなたはフォームの幅にアクセスできます:

変数にフォームの

もう一つの可能​​性は、フォーム内の静的プロパティで幅を節約するために、次のようになります。

public partial class Form1 : Form 
{ 
    public static int UniversalWidth; 
    protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 
     UniversalWidth = Width; 
    } 
//... 

今、あなたはUniversalWidthフィールドを介して幅にアクセスできます。

webBrowser1.Width = Form1.UniversalWidth; 

しかし、フォームの複数のウィンドウを開いていると機能しないので、これを使用することはお勧めしません。


私はあなたのプロジェクト全体を知らないので、実際にコードがForm1クラスの内部に記述されている可能性があります。

webBrowser1.Width = this.Width; 

をそれとも、あなたは別のクラスのサイズにアクセスしたい場合は、コンストラクタで、このクラスにフォームを与えることができる:次に、あなたはもちろん、そのように幅にアクセスすることができ、その後

var otherClass = new yourOtherClass (this); 

他のクラスのコンストラクタは次のようになります。

public yourOtherClass (Form1 yourForm) 
{ 
    webBrowser1.Width = yourForm.Width; 
} 

より正確な情報については、してくださいPより正確な情報を提供します。

+0

@JacobBatesはこれを助けましたか?それがあなたの問題を解決した場合は、答えとしてマークすることを忘れないでください。これはあなたとより広いコミュニティが解決された問題を特定するのに役立ちます。 – MetaColon

関連する問題