C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: C# form1クラスの分割ファイルについて


(過去ログ 141 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■82743 / inTopicNo.1)  C# form1クラスの分割ファイルについて
  
□投稿者/ 老人v28 (1回)-(2017/02/01(Wed) 09:20:46)

分類:[C#] 

初めまして老人v28です。c#フォームアプリでの
public partial class Form1 : Form { 
クラスの分割ファイルについて質問です
各種サイト様にて勉強させて頂いた内容では
出来るようなのですが、可能かどうか解りません
開発環境
pc:富士通エスプリモ
os:Win10 無償UP版(win8.1より)
IDE:
Microsoft Visual Studio Community 2015 Version 14.0.24720.00 Update 1
Microsoft .NET Framework Version 4.6.01586
言語:Microsoft Visual C# 2015
です。
namespace wfaは同じものです。
ファイル(Form1.cs)では
コントロール及びフォーム本体の制御が
可能ですが、別ファイル(Class1.cs)で記述した
public partial class Form1 {
では制御出来ません。
同じようには出来ないのでしょうか
c#はじめて3日目です。多分超!基本的な
部分で勘違いをしていると思います
ご教授賜れば幸甚です(^^;
m(__)m
Form1.Designer.csは変更していません。
(Form1.cs)
using System;
using System.Windows.Forms;
//*****************************************************************************
namespace wfa  {
    public partial class Form1 : Form  {
        public Form1() {
            InitializeComponent();
            button1.Text = "osu2";
        }
        private void button1_Click(object sender, EventArgs e)  {
            for (int p = 0; p <= 100000; p++) {
                TextBox1.Text = p.ToString();
                Application.DoEvents();
                
           }
            Close();
        }
        private void label1_Click(object sender, EventArgs e)  {
        }
    }
}
//*****************************************************************************
(Class1.cs)
using System;
using System.Windows.Forms;
namespace wfa    {
    public partial class Form1    {
        //todo???


    } 
}  
//*****************************************************************************
(Program.cs)です。
using System;
using System.Windows.Forms;
namespace wfa  {
    static class Program  {

    [STAThread]
    static void Main()  {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
//*****************************************************************************
  }
}

やりたいこと(実験)
button1_Clickでのメソッド(実行内容を関数?static class)を
別ファイルで記述し、button1_Clickで呼び出したいです。

引用返信 編集キー/
■82744 / inTopicNo.2)  Re[1]: C# form1クラスの分割ファイルについて
□投稿者/ はるかぜ (4回)-(2017/02/01(Wed) 10:11:51)
これでできませんか?

(Form1.cs)
using System;
using System.Windows.Forms;
//*****************************************************************************
namespace wfa  {
    public partial class Form1 : Form  {
        public Form1() {
            InitializeComponent();
            button1.Text = "osu2";
        }
        private void button1_Click(object sender, EventArgs e)  {
           test();
        }
        private void label1_Click(object sender, EventArgs e)  {
        }
    }
}
//*****************************************************************************
(Class1.cs)
using System;
using System.Windows.Forms;
namespace wfa    {
    public partial class Form1    {
        //todo???
        private void test() {
           for (int p = 0; p <= 100000; p++) {
                TextBox1.Text = p.ToString();
                Application.DoEvents();
                
           }
            Close();
        }

    } 
}  
//*****************************************************************************

引用返信 編集キー/
■82746 / inTopicNo.3)  Re[1]: C# form1クラスの分割ファイルについて
□投稿者/ WebSurfer (1137回)-(2017/02/01(Wed) 11:33:27)
No82743 (老人v28 さん) に返信

> button1_Clickでのメソッド(実行内容を関数?static class)を
> 別ファイルで記述し、button1_Clickで呼び出したいです。

意味が理解できていませんが・・・

Form1 のデザイン画面で Button.Click イベントを設定すると Form1.cs のコードに自動生成
されるイベントハンドラ button1_Click を Class1.cs ファイルに partial として定義した
Form1 クラスの中に記述したいということですか?

その理解でよければ、 Form1.cs のコードのイベントハンドラ button1_Click をエディタ上で
切り取って Class1.cs ファイルの Form1 クラスの中に貼り付ければいいはずです。
引用返信 編集キー/
■82748 / inTopicNo.4)  Re[2]: C# form1クラスの分割ファイルについて
□投稿者/ 老人v28 (2回)-(2017/02/01(Wed) 14:20:17)
はるかぜ様、WebSurfer様
早々のレス、有難うございます。
はるかぜ様のコードの通りで出来ました。
private void test(){を
インスタンスを作らずメソッドを使うには
staticをつけるって聞きましたので。
private static void test(){と書いて
ました
同じ内容を記述するとフォームのコントロール
が制御不可になります。
同一クラス内のメソッド呼び出しなので
staticは不要との考えで良いのでしょうか。
ご存じでしたら、お教えください。
??staticをもう少し勉強してみます。
WebSurfer様の件も実験してみます。
お忙しい中本当に有難うございました。

引用返信 編集キー/
■82750 / inTopicNo.5)  Re[3]: C# form1クラスの分割ファイルについて
□投稿者/ はるかぜ (5回)-(2017/02/01(Wed) 15:06:02)
No82748 (老人v28 さん) に返信
> インスタンスを作らずメソッドを使うには
> staticをつけるって聞きましたので。
> private static void test(){と書いて
> ました

たしかにインスタンスを作らずにメソッドを使うにはそのメソッドにstaticをつけなければいけません。
ですが、クラスに定義されているプロパティはインスタンスを作成した時に初めてメモリ上に確保され、
そのプロパティは確保したインスタンスの数分だけメモリ上に存在します。

staticなメソッドはメモリ上の1箇所にしか存在しないため、このメソッドからプロパティにアクセスしようと思うと
どのインスタンスのプロパティを見に行けばいいのかわかりません。
その為、同じクラス内に書いてあってもstaticが付いているものとそうでないものは別々に考える必要があります。

同じクラス内に書いてあるのでそのクラスのプロパティならアクセスできると考えてしまいがちですが、気をつけましょう。
引用返信 編集キー/
■82751 / inTopicNo.6)  Re[3]: C# form1クラスの分割ファイルについて
□投稿者/ WebSurfer (1138回)-(2017/02/01(Wed) 15:15:28)
No82748 (老人v28 さん) に返信

> インスタンスを作らずメソッドを使うにはstaticをつけるって聞きましたので。

そのこと自体は間違っていません。

しかし、はるかぜさんが書いた test() は Form1 クラスのインスタンスメソッドです。

button1_Click メソッドの中で test() として書かれていますが、this が省略できるの
でそのように書けるだけで、実際は this.test() と同じです。

Program.cs で new Form1() としたところで Form1 のインスタンスが生成され、それへ
の参照が this になると考えればいいと思います。


なお、今回の話とは関係ないことですが Application.DoEvents() メソッドを使うのは
やめた方がよいです。理由は Application.DoEvents でググってヒットする記事を読ん
でください。(そんなのをわけもわからず使うやつは豆腐の角に・・・という過激な発
言もあるようです)

引用返信 編集キー/
■82754 / inTopicNo.7)  Re[4]: C# form1クラスの分割ファイルについて
□投稿者/ 老人v28 (3回)-(2017/02/01(Wed) 16:53:41)
はるかぜ様、WebSurfer様明確なご回答、有難うございました。
何となく理解できたように感じます。さらに勉強致します。
今まであまりクラスを使う機会もなく戸惑っています、
奥が深い分、安全性の高いソースコードが書けるのですね。

今後 application.doeventは使わない方向で精進致します。
このスレッドは解決とさせていただきます。
また質問させて頂くかと思いますが、宜しくお願いいたします。
ありがとうございました。
m(__)m


解決済み
引用返信 編集キー/
■82756 / inTopicNo.8)  Re[1]: C# form1クラスの分割ファイルについて
□投稿者/ PANG2 (157回)-(2017/02/01(Wed) 17:07:06)
No82743 (老人v28 さん) に返信
> やりたいこと(実験)
> button1_Clickでのメソッド(実行内容を関数?static class)を
> 別ファイルで記述し、button1_Clickで呼び出したいです。
> 

実行内容を関数化して、他のフォームからも使い回せるように共通クラスに置きたい、ということでしょうか?

(Form1.cs)
public partial class Form1 : Form
{
	private void button1_Click(object sender, EventArgs e)
	{
		Class1.test(textBox1, 100000);
		Close();
	}
}

(Class1.cs)
class Class1
{
	public static void test(System.Windows.Forms.TextBox tb, int max)
	{
		for (int p = 0; p <= max; p++) {
			tb.Text = p.ToString();
			tb.Refresh();
		}
	}
}

引用返信 編集キー/
■82769 / inTopicNo.9)  Re[5]: C# form1クラスの分割ファイルについて
□投稿者/ 老人v28 (4回)-(2017/02/02(Thu) 23:22:07)
PANG2 様、
ご教示有難うございます。クラスをなかなか理解できず
過去につくった関数などをクラス化しようと、毎日勉強していますが
頭がクラクラしております。とても参考になりました。
すこしクラスの便利さのようなものが
垣間見れたようなきがします。
本当に、ありがとうございました
m(__)m

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -