2016-08-10 6 views
-2

フォームウィンドウのサイズを変更しようとしていますが、見つかったすべてのMSDNページでform.widthやform.heightなどを使用するように指示しています。 IntelliSenseポップアップのオプションとして表示されます。Visual C#form1には幅の定義が含まれていません

this.widthを使用するとポップアップが表示されますが、form1のボタンをクリックしてform2のサイズを変更したい場合はどうすればよいですか?フォーム名でプロパティを変更するにはどうすればよいですか?

私には何が欠けていますか?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace test 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form1.Width = 800; //ERROR: does not contain a definition for width 
      this.Width = 800; //this is allowed though 
      Form2.Width = 800; //ERROR: does not contain a definition for width 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //thought mayeb I need a size 1st so tried this 
      Form1.Size = new System.Drawing.Size.(1029, 640); //ERROR: An object reference is required for ... 'System.Windows.Forms.Form.Size.get'  

      //dunno why this doesnt work its apparently correct acording to MSDN 
      //https://msdn.microsoft.com/en-us/library/aa984427(v=vs.71).aspx 
      //https://msdn.microsoft.com/en-us/library/ms229606(v=vs.110).aspx 
     } 
    } 
} 

私はlooooong時間前にVB6で再生ので、私はどんなのVisual Studio UIのものを行っていないと私はそれがちょうど名前で任意のフォームにアクセスし、それを操作することが可能になるために使用されると確信しています。

更新:コメントに基づいてwidthWidthに変更しましたが、問題は引き続き発生するため、大文字と小文字の区別は問題ではないようです。

更新:今起こっていることが分かります。だから私が本当に知る必要があるのは、起動時にすでに実行されているform1のインスタンスを別のフォームから参照する方法です。

私はform2をインスタンス化して表示します。 Form1を操作するためにform2にボタンを配置したい場合は、変数にインスタンス化していないときにどのように参照するのですか? (プログラム開始時にform1が自動的に実行されるため)

+0

ケースセンテクティブ! – TaW

+2

これは、例えば 'var frmForm1 = new Form1();'のようなWidthプロパティを取得するために 'Form1'のインスタンスを作成する必要があり、' frmForm1.Width'にアクセス可能であるという理由からです。適切。私はキーワードの「this」と「インスタンスのオブジェクト」を作成することをお勧めします – MethodMan

+0

@MethodManああ大丈夫です。しかし、実行時に既に表示されているform1の作成と追加コピーはありませんか?これを最後に追加しようとしましたが、私はmemmory exception faultを受け取ります。 //別のテスト... var frm = new Form1(); frm.Width = 800; frm.ShowDialog(); – CptOZ

答えて

1

C#は大文字小文字を区別します。 widthWidthである必要があります。また、コードコメントに含まれている後者のエラーで示されるように、それらの(Form1とForm2の可能性が高い)ものは、識別子ではなくclassの識別子です。クラス名を使用して、クラスの要素staticのみを参照することができます。

0

ウエーエード氏によると、widthWidthであるはずです。また、(彼が言う通り)Form1Form2はクラス名なので、C#でフォームの値に影響を与えるためにそれらを使うことはできません。私が正しくリコール代わりにあなたが

this.Size = new System.Drawing.Size.(1029, 640)

C#でthisで表現され、現在のインスタンス上でこれらの値に影響を与えることになるでしょう、VBであなたがやっているような彼らのクラス名を通じてフォームを変更することができ、 C#ではそうではありません

2

次のように試してみると、うまくいくことがわかります。

private void button1_Click(object sender, EventArgs e) 
{ 
    this.Width = 800; //this is in reference to Form1 
    var frm2 = new Form2(); 
    frm2.Width = 800; 
    frm2.ShowDialog(); 
    frm2.Dispose(); 
} 
関連する問題