アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンが押されると表示されてるものがすべてなくなるという処理を行いたいです
~~~省略~~~
static void Main()
{ 
~~省略~~
Form form = new RPG();
Button btn = new Button();
btn.Parent = form;
btn.Location = new Point(600, 450);
btn.Text = "ゲームスタート";
btn.BackColor = SystemColors.Control;
btn.Click += new EventHandler(btnOnClick);
btn.Size = new Size(200, 70);
  
   Application.Run(form);
}

static void btnOnClick(object sender, EventArgs e)
{
this.Refresh();
}
と、やるとCS0026キーワード 'this'は、静的プロパティ、静的メソッド、または静的フィールド初期化子では無効です。と出ます

解決方法をだれか教えてください。

質問者からの補足コメント

  • あまりわからないので勉強したいと思います
    どのあたりから勉強すればよいと思いますか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/06/29 15:56

A 回答 (5件)

>どのあたりから勉強すればよいと思いますか?



ネットにあまりよい資料が見あたら無かったので・・・取りあえず
http://wisdom.sakura.ne.jp/system/msnet/msnet_wi …

win32 apiの本ですか、「プログラミングWindows第5版」を読めば完璧。

補足しておくと、vista以降、メ二ユーのドロップダウンやウィンドウの
オーバーラップで無効領域が作られることはほぼ無くなったそうです。
でも皆無では無いので、対処は必要らしいです。
    • good
    • 0
この回答へのお礼

ありがとうございます
勉強頑張ります

お礼日時:2018/07/09 16:27

Refresh()関数は、目的からしてformのメンバですかね。



EventArgsクラスをオーバーライドして、メンバにform型の変数を定義すればeを介してformのオブジェクトをわたせます。
e.form型の変数名.Refresh();
でアクセスできます。
    • good
    • 0

確かに超初心者ですね~。


OnPaint とRefresh はなかなか濃い、中級者向けのメソッドで
基本的なコントロールの描画メカニズムの理解が必須。
このあたり、しっかり調べてますか?
この回答への補足あり
    • good
    • 0

静的メソッドからインスタンスメンバを利用することはできません。



staticは、インスタンス化を要しない、そのクラス内で唯一無二のものになります。
例えばですが、
class A
{
static void Main() { }
}
であれば、Main()へのアクセスは、
A.Main()
です。

calss A
{
void Main() { }
}
であれば、
var classA = new A();
classA.Main();
となります。

前者はどんなに至る個所でAクラスを利用していようが、必ず1つのメソッドしかありません。
これはstaticフィールドを用意して処理していた場合、呼び出す度にstaticフィールドの値は
1つしか持てません。

後者はインスタンスごとにそのメソッドがあることになるので、至る所でインスタンス化すれば
それごとにメソッドが用意されます。
この場合、フィールドの値もインスタンスごとに持つことになり、他のインスタンスオブジェクトの
内容が影響を及ぼすことはありません。


さて、今回のメソッドRefresh()ですが、自前のメソッドであれば
private void Refresh() { }
という定義とかなんじゃないですかね。
それがstaticメソッドからしか呼ばれないものだとしたら
private static void Refresh() { }
とし、
A.Refresh();
または
Refresh();
と記述すれば通るでしょう。
    • good
    • 1

超初心者なら、まずはC#自体や、そこで使われているオブジェクトの仕組とかを理解してからの方がよいかと。




staticなメソッドは、クラスの属しているメソッドで、インスタンス無しに実行できます。
インスタンスが不要なので「自分自身のインスタンス」自体が存在しません。
よって「this」はありません。

エラーメッセージに書いてある通りです。


thisに相当するようなインスタンスを他の方法で指定するとか
ここではなく、そのthisとしたいクラスの中で、インスタンスメソッド(staticが無いメソッド)として定義するとか
がよくある方法です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A