忍者ブログ

HITORIGOTO

哀戦士のオンラインメモ帳。 忍者ツールズって15年前にお世話になってたけど今も 残っててびっくりした。

C# 別フォームのボタンを押す

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

C# 別フォームのボタンを押す

c# - C#を使用して別のフォームからボタンを押す方法は?


私には2つの形式があります:

  1. スクリーンショットを作成するForm1。
  2. form1によって作成されたスクリーンショットを操作するための2つのボタンがあるForm2。

Form1には、スクリーンショットを保存するためのメソッドを含む「非表示」ボタンもあります。


私の質問:


form2からform1のボタンをクリックするにはどうすればよいですか?また、form1が閉じられてからform2も閉じられることを確認するにはどうすればよいですか?


私はこのようなことを試しましたが、form2の保存ボタンをクリックしても何も起こりません:


var form = Form.ActiveForm as Form1;
if (form != null)
{
form.button1.PerformClick();
}

推奨される回答1

まず、複数のフォームが機能する通常の方法は、スタートアップフォームを閉じると、セカンダリフォームも閉じることです。Form2を作成している場合はForm1、を使用して表示し(your second Forms Instance).Show(this)ます。その後、Form2の親プロパティでフォームにアクセスできます。すなわち


      var form = (Form1)this.Owner();

これで、のすべてのパブリックメソッドにアクセスできるようになりますForm1。また、スクリーンショットを保存するために使用しているコードを取得してパブリックメソッドに入れます。特に、ボタンが隠れた。


簡単な例を次に示します。


Form1


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show(this);
}

}

Form2


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

private void button1_Click(object sender, EventArgs e)
{
var frm = (Form1)this.Owner;
if (frm != null)
frm.button1.PerformClick();
}
}

推奨される回答2

非表示のボタンを作成する代わりに、ボタンにリンクされていないメソッドを作成するだけです。


Form1.cs


public void SaveScreenshot()
{
//TODO: Save the Screenshot
}

Form2.cs


Form1 form = Application.OpenForms.OfType<Form1>().FirstOrDefault();
if (form != null) {
form.SaveScreenshot();
}

SaveScreenshotまた、メソッドをpublicまたはとして宣言してinternalください。


を取得するコードを変更しましたForm1。上のボタンをクリックするForm2と、が表示Form2されるActiveFormため、コードが「表示」されることはありませんForm1using System.Linq;コードの先頭にが付いている場合にのみ機能するLINQメソッドをコードで使用しました。



https://tagsqa.com/detail/33186


https://kaede.adiary.jp/parentFormObj
https://blog.xin9le.net/entry/2013/10/27/195614

performクリックはできなかった
PR

コメント

プロフィール

HN:
哀戦士
性別:
非公開

P R