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

わんくま同盟

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

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

ツリー一括表示

別のフォーム釦をおす /しろ (17/11/29(Wed) 08:21) #85851
Re[1]: 別のフォーム釦をおす /魔界の仮面弁士 (17/11/29(Wed) 08:58) #85852
  └ Re[2]: 別のフォーム釦をおす /しろ (17/11/30(Thu) 07:40) #85874
    └ Re[3]: 別のフォーム釦をおす /魔界の仮面弁士 (17/11/30(Thu) 08:32) #85875
      └ Re[4]: 別のフォーム釦をおす /しろ (17/11/30(Thu) 12:29) #85891
        ├ Re[5]: 別のフォーム釦をおす /Jitta (17/11/30(Thu) 15:31) #85901
        └ Re[5]: 別のフォーム釦をおす /WebSurfer (17/11/30(Thu) 16:06) #85902
          └ Re[6]: 別のフォーム釦をおす /魔界の仮面弁士 (17/11/30(Thu) 21:58) #85907
            └ Re[7]: 別のフォーム釦をおす /WebSurfer (17/11/30(Thu) 22:37) #85909
              └ Re[8]: 別のフォーム釦をおす /しろ (17/12/01(Fri) 07:57) #85912 解決済み


親記事 / ▼[ 85852 ]
■85851 / 親階層)  別のフォーム釦をおす
□投稿者/ しろ (35回)-(2017/11/29(Wed) 08:21:03)

分類:[VB.NET/VB2005 以降] 

VBで例Aのフォームにある釦を押すと
Bのフォームのボタンを同時にしたいのですが
どうすればいいですか?

[ □ Tree ] 返信 編集キー/

▲[ 85851 ] / ▼[ 85874 ]
■85852 / 1階層)  Re[1]: 別のフォーム釦をおす
□投稿者/ 魔界の仮面弁士 (1483回)-(2017/11/29(Wed) 08:58:05)
No85851 (しろ さん) に返信
> 釦を押すと
> ボタンを同時にしたい

表現の揺れが何だか気になりますが、自アプリ内の話なら
対象となる Button の PerformClick メソッドを呼び出すとか。

他アプリのボタンなら、AccessibleObject の DoDefaultAction メソッドなど。
[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85852 ] / ▼[ 85875 ]
■85874 / 2階層)  Re[2]: 別のフォーム釦をおす
□投稿者/ しろ (36回)-(2017/11/30(Thu) 07:40:33)
No85852 (魔界の仮面弁士 さん) に返信
> ■No85851 (しろ さん) に返信
>>釦を押すと
>>ボタンを同時にしたい
>
> 表現の揺れが何だか気になりますが、自アプリ内の話なら
> 対象となる Button の PerformClick メソッドを呼び出すとか。
>
> 他アプリのボタンなら、AccessibleObject の DoDefaultAction メソッドなど。
具体的にこんな感じで作ってみましたがフォームが連続して出るバグみたいな正体になるのですが
間違っていますか?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' Form1 の新しいインスタンスを生成する
Dim cForm2 As New Form1()

' Form1 を表示する
cForm2.Show()
Button1.PerformClick()

End Sub
End Class
[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85874 ] / ▼[ 85891 ]
■85875 / 3階層)  Re[3]: 別のフォーム釦をおす
□投稿者/ 魔界の仮面弁士 (1486回)-(2017/11/30(Thu) 08:32:58)
No85874 (しろ さん) に返信
> Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>  ' Form1 の新しいインスタンスを生成する
>  Dim cForm2 As New Form1()
>
>  ' Form1 を表示する
>  cForm2.Show()
>  Button1.PerformClick()
> End Sub


自フォーム A の Button1 の Click イベントの中で、
自フォーム A の Button1 の PerformClick を呼んでいるので、、
クリックイベントが延々と呼び出されてしまっています。


他フォーム B (この場合は cForm2 なのかな?) のボタンを PerformClick しないと。
[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85875 ] / ▼[ 85901 ] ▼[ 85902 ]
■85891 / 4階層)  Re[4]: 別のフォーム釦をおす
□投稿者/ しろ (38回)-(2017/11/30(Thu) 12:29:21)
No85875 (魔界の仮面弁士 さん) に返信
> ■No85874 (しろ さん) に返信
>>Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
>> ' Form1 の新しいインスタンスを生成する
>> Dim cForm2 As New Form1()
>>
>> ' Form1 を表示する
>> cForm2.Show()
>> Button1.PerformClick()
>>End Sub
>
>
> 自フォーム A の Button1 の Click イベントの中で、
> 自フォーム A の Button1 の PerformClick を呼んでいるので、、
> クリックイベントが延々と呼び出されてしまっています。
>
>
> 他フォーム B (この場合は cForm2 なのかな?) のボタンを PerformClick しないと。

「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
意味が分からないのですが・・どうしないといけないんですか?



[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85891 ] / 返信無し
■85901 / 5階層)  Re[5]: 別のフォーム釦をおす
□投稿者/ Jitta (343回)-(2017/11/30(Thu) 15:31:41)
No85891 (しろ さん) に返信

> 「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
> 意味が分からないのですが・・どうしないといけないんですか?

人と話をする時、頼みごとをする時、何を気をつけますか?
「誰が、何時、何を、何故、どこで、どうする」ということ、
いわゆる1H5Wをはっきりと示さないでしょうか。
プログラムコードとは、コンピュータに対して頼みごとをするための言語なので、
人間に対するのと同じように、1H5Wを明らかにしなければなりません。
Button1.PerformClick の Button1 は、どこにあるのでしょうか。
今のコードだと、このコードを書いているフォームにあるものを示しています。

[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85891 ] / ▼[ 85907 ]
■85902 / 5階層)  Re[5]: 別のフォーム釦をおす
□投稿者/ WebSurfer (1386回)-(2017/11/30(Thu) 16:06:52)
No85891 (しろ さん) に返信

> 「cForm2 なのかな?) のボタンを PerformClick しないと。」ってどうしたらよいのか
> 意味が分からないのですが・・どうしないといけないんですか?

質問者さんがやっているのは、自フォームのボタンクリックのイベントハンドラで、再度自フォー
ムのボタンをクリックしているので、永久ループになっているのは分かりますか?

やらなければいけないのは、自フォームのボタンクリックのイベントハンドラで生成した別フォー
ムの中にあるボタンをクリックしなければならないということは分かりますか?

そうするためには別フォームの中にあるボタンに外部からアクセスできる必要があるのですが、
デザイナでツールボックスから Button を Form にドラッグ&ドロップするとその Button のアク
セス修飾子は private になって外部からはアクセスできません。

なので、例えば(あくまで例えばです)、外部から Button にアクセスできるようパブリックプロ
パティを定義して、それを通じでアクセスすれば望むことができると思います。

具体的には、Form2 というのを作ってそれに Button をドラッグ&ドロップしたとすると、以下
のようにパブリックプロパティを追加します。

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 WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        // button1 にアクセスするためのパブリックプロパティ
        public Button Button1
        {
            get { return this.button1; }
        }
    }
}

それを Form1 のボタンクリックで以下のように使います。

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;
using System.Data.SqlClient;
using System.Security.Principal;

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

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f = new Form2();
            f.Button1.Click += Form2ButtonClick;
            f.Show();
            f.Button1.PerformClick();
        }

        private void Form2ButtonClick(object sender, EventArgs e)
        {
            MessageBox.Show("button clicked");
        }
    }
}

[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85902 ] / ▼[ 85909 ]
■85907 / 6階層)  Re[6]: 別のフォーム釦をおす
□投稿者/ 魔界の仮面弁士 (1487回)-(2017/11/30(Thu) 21:58:49)
No85902 (WebSurfer さん) に返信
> デザイナでツールボックスから Button を Form にドラッグ&ドロップするとその Button のアク
> セス修飾子は private になって外部からはアクセスできません。

private が既定値なのは、C# の話ですよね?
今回の質問は Visual Basic ですよ。

https://msdn.microsoft.com/ja-jp/library/ms233630.aspx
[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85907 ] / ▼[ 85912 ]
■85909 / 7階層)  Re[7]: 別のフォーム釦をおす
□投稿者/ WebSurfer (1388回)-(2017/11/30(Thu) 22:37:08)
No85907 (魔界の仮面弁士 さん) に返信

> private が既定値なのは、C# の話ですよね?
> 今回の質問は Visual Basic ですよ。

そうですね、Button にアクセスするパブリックプロパティは不要でした。

なので、Form1 で以下のようにするだけでよさそうです。

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim f As Form2 = New Form2()
AddHandler f.Button1.Click, AddressOf Form2ButtonClick
f.Show()
f.Button1.PerformClick()
End Sub

Private Sub Form2ButtonClick(sender As Object, e As EventArgs)
MessageBox.Show("button cliked")
End Sub
End Class

[ 親 85851 / □ Tree ] 返信 編集キー/

▲[ 85909 ] / 返信無し
■85912 / 8階層)  Re[8]: 別のフォーム釦をおす
□投稿者/ しろ (39回)-(2017/12/01(Fri) 07:57:25)
WebSurferさん返信ありがとうございます。
まだなんとなくですがプログラムの意味が
分かった程度ですがありがとぅございます。
解決済み
[ 親 85851 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -