DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33121 / inTopicNo.1)  タブの上にあるボタンのサイズ変更、位置移動する方法
  
□投稿者/ はやぶさ 一般人(1回)-(2015/09/30(Wed) 15:08:21)
  • アイコン環境/言語:[タブレットWindows8.1 VisualStudio2013 Vb.net6.0 ] 
    分類:[.NET] 

     タブ名とボタン名を取得するプログラムで、タブ上でボタンを作成して、サイズを変更、任意の箇所に移動して、並べ替え等を行いたいのですがうまくいきません。
     
     また、その追加したり移動した状態を終了時に保存したいのですがこれも方法が分かりません。

     申し訳ありませんがどなたかご教示いただけないでしょうか。

引用返信 削除キー/
■33122 / inTopicNo.2)  Re[1]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ 魔界の仮面弁士 大御所(986回)-(2015/09/30(Wed) 15:59:47)
  • アイコンNo33121に返信(はやぶささんの記事)
    > 環境/言語:[タブレットWindows8.1 VisualStudio2013 Vb.net6.0 ] 
    > 分類:[.NET] 

    Vb.net6.0…?

    VB.NET の最初のバージョン(2002)は 7.0 ですね。
    VS2013 を使っているのなら、バージョン番号は 12.0 となります。

    それとも、(.NET 版の)VB2013 と、(.NET以前の)VB6 の混在でしょうか?


    > タブ名とボタン名を取得するプログラムで、
    この場合の「タブ」や「ボタン」とは、具体的には何を表していますか?

    Tab キーのことでは無さそうなので、画面部品としての
    コントロールのことを指しているのだと予想しますが、それでも

    System.Windows.Controls.TabControl なのか
    System.Windows.Forms.TabControl なのか
    AcitveX 版のコントロールなのか(SSTab とか TabStrip とか)
    Web の話なのか(ajaxToolkit:TabContainer とか jQuery の Tabs とか)

    などなど、いろいろなパターンが考えられます。

    現時点では、質問内容が曖昧すぎて何とも答えにくいので
    環境なども含め、もう少し具体的に書いてみてください。


    > 等を行いたいのですがうまくいきません。
    「うまくいかない」とだけ書かれても、状況が掴めません。

    ・どのようなコードを書いたときに、どうなってしまったのか
    ・どのような資料を調べていて、その資料のどの部分が分からないのか。
    ・何をしようとして、そのためにどのような情報を探しているのか。

    などが、第三者にわかるように書いてみてください。
    http://dobon.net/cgi-bin/vbbbs/vb_wizard.html
    http://dobon.net/vb/bbs/index.html#irresponsible


     
    > 終了時に保存したいのですがこれも方法が分かりません。
    どこに保存する予定ですか?

    データベース、レジストリ、app.config、XMLファイル、csvファイル、
    iniファイル、独自形式のファイル、永続化cookie…などなど。
    http://www.atmarkit.co.jp/fdotnet/dotnettips/263apppath/apppath.html
    http://dobon.net/vb/dotnet/file/index.html
引用返信 削除キー/
■33124 / inTopicNo.3)  Re[2]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ はやぶさ 一般人(2回)-(2015/10/01(Thu) 18:47:41)
  • アイコンNo33122に返信(魔界の仮面弁士さんの記事)
    > ■No33121に返信(はやぶささんの記事)
    >>環境/言語:[タブレットWindows8.1 VisualStudio2013 Vb.net6.0 ] 
    >>分類:[.NET] 
    >
    > Vb.net6.0…?
    >
    > VB.NET の最初のバージョン(2002)は 7.0 ですね。
    > VS2013 を使っているのなら、バージョン番号は 12.0 となります。
    >
    > それとも、(.NET 版の)VB2013 と、(.NET以前の)VB6 の混在でしょうか?
    >
    >
    >>タブ名とボタン名を取得するプログラムで、
    > この場合の「タブ」や「ボタン」とは、具体的には何を表していますか?
    >
    > Tab キーのことでは無さそうなので、画面部品としての
    > コントロールのことを指しているのだと予想しますが、それでも
    >
    > System.Windows.Controls.TabControl なのか
    > System.Windows.Forms.TabControl なのか
    > AcitveX 版のコントロールなのか(SSTab とか TabStrip とか)
    > Web の話なのか(ajaxToolkit:TabContainer とか jQuery の Tabs とか)
    >
    > などなど、いろいろなパターンが考えられます。
    >
    > 現時点では、質問内容が曖昧すぎて何とも答えにくいので
    > 環境なども含め、もう少し具体的に書いてみてください。
    >
    >
    >>等を行いたいのですがうまくいきません。
    > 「うまくいかない」とだけ書かれても、状況が掴めません。
    >
    > ・どのようなコードを書いたときに、どうなってしまったのか
    > ・どのような資料を調べていて、その資料のどの部分が分からないのか。
    > ・何をしようとして、そのためにどのような情報を探しているのか。
    >
    > などが、第三者にわかるように書いてみてください。
    > http://dobon.net/cgi-bin/vbbbs/vb_wizard.html
    > http://dobon.net/vb/bbs/index.html#irresponsible
    >
    >
    >  
    >>終了時に保存したいのですがこれも方法が分かりません。
    > どこに保存する予定ですか?
    >
    > データベース、レジストリ、app.config、XMLファイル、csvファイル、
    > iniファイル、独自形式のファイル、永続化cookie…などなど。
    > http://www.atmarkit.co.jp/fdotnet/dotnettips/263apppath/apppath.html
    > http://dobon.net/vb/dotnet/file/index.html


    ご指摘ありがとうございます。説明が酷くてすみません。

    ・(.NET 版の)VB2013 と、(.NET以前の)VB6 の混在となります。

    ・タブはFormにて描画したタブコントロールの(System.Windows.Forms.TabControl)です。。
    ・ボタンはボタンコントロールです。

    ■流れ
    @FormX上に作成したタブコントロールの各ページにボタンコントロールを配置した画面を表示します。
     ボタンコントロールはリサイズしたり位置を変更したり、追加、削除ラベル名の変更をします。
    A新規のボタンコントロールをFormYに作成します。(FormXに『ボタン作成』のボタンコントロールを配置して作成します。)
    BAで新規作成されたのボタンコントロールを画面上の任意のタブコントロールのページに配置して、
     リサイズしたり位置を変更したり、追加、削除ラベル名の変更をします。
    B任意のボタンコントロールを押下すると押下したボタンコントロールの配置されていたタブ名と
     そのボタンコントロールのラベル名を取得します。
    C変更状態を保存する。(My.Settings.Save())

    ■現状の問題
    <下の2点が解決しません。>
     ・ボタンはリサイズしたり位置を変更したり、追加、削除ラベル名の変更をします。
     ・変更状態を保存する。
     ボタンのリサイズ方法については
      『VB.NETで作る』の2005年04月16日の記事『移動、リサイズのできるコントロールを作る』
      を参考にさせていただきました。
      http://shinshu.fm/MHz/88.44/archives/0000043418.html
      この記事ですと、Formの中に上記のコントロールはできるのですが、
      移動先に配置・保存することができません。
      
      そこで、「このリサイズできるのコントロールを任意の位置に配置する方法」と
      「このリサイズのできるコントロールをタブコントロール内に配置する方法」があれば
      お教えください。

900×668 => 250×185
イメージ
1443692861.png
/57KB
引用返信 削除キー/
■33127 / inTopicNo.4)  Re[3]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ 魔界の仮面弁士 大御所(988回)-(2015/10/05(Mon) 12:10:42)
  • アイコンNo33124に返信(はやぶささんの記事)
    >  ボタンのリサイズ方法については
    >   『VB.NETで作る』の2005年04月16日の記事『移動、リサイズのできるコントロールを作る』
    >   を参考にさせていただきました。
    >   http://shinshu.fm/MHz/88.44/archives/0000043418.html
    >   この記事ですと、Formの中に上記のコントロールはできるのですが、
    >   移動先に配置・保存することができません。

    親コントロールの差し替えが必要ですね。

    『Private Sub ResizeBorderForm_MouseDown』の処理を、
    以下の物に差し替えてみて下さい。


    ' ■ドラッグによるターゲット移動
    Private Sub ResizeBorderForm_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown
      '右クリック時、フォームを閉じる
      If e.Button = MouseButtons.Right Then
        'マウス位置をスクリーン座標で取得
        Dim posCurScr = Control.MousePosition

        'マウス座標にあるコンテナコントロールを取得
        TargetControl.Visible = False
        Dim cursorContainer As Control = GetContainer(GetControlFromPosition(posCurScr))
        TargetControl.Visible = True

        'コンテナの変更
        Dim posCtrlScr = TargetControl.PointToScreen(TargetControl.Location)
        TargetControl.Parent = cursorContainer
        TargetControl.Location = TargetControl.PointToClient(posCtrlScr)

        '移動処理終了
        Me.Close()
      End If

      If e.Button <> MouseButtons.Left Then Exit Sub

      '移動開始位置の記録
      MoveAdjustPoint = New Point
      MoveAdjustPoint.X = e.X
      MoveAdjustPoint.Y = e.Y

      Me.Cursor = Cursors.SizeAll

      HasResizeEvent = True
    End Sub


    ''' <summary>
    ''' 指定した座標にあるコントロールを返す。
    ''' </summary>
    Private Function GetControlFromPosition(screenPosition As Point) As Control
      Dim container As Control = TargetControl.FindForm()
      Do
        '非表示のコントロールは飛ばす
        Dim c = container.GetChildAtPoint(container.PointToClient(screenPosition),
                GetChildAtPointSkip.Invisible Or GetChildAtPointSkip.Transparent)
        If c Is Nothing Then
          Return container
        Else
          container = c
        End If
      Loop
    End Function

    'System.Reflection
    Private Const privateInstance As BindingFlags = BindingFlags.Instance Or BindingFlags.NonPublic
    Private ReadOnly InternalGetStyle As MethodInfo = GetType(Control).GetMethod("GetStyle", privateInstance)

    ''' <summary>
    ''' コントロールのコンテナを返す。自身がコンテナなら自身を返す。
    ''' </summary>
    ''' <param name="target">調査対象のコントロール。</param>
    Private Function GetContainer(target As Control) As Control
      If CBool(InternalGetStyle.Invoke(target, {ControlStyles.ContainerControl})) Then
        Return target
      Else
        Return GetContainer(target.Parent)
      End If
    End Function
引用返信 削除キー/
■33131 / inTopicNo.5)  Re[4]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ はやぶさ 一般人(3回)-(2015/10/05(Mon) 18:45:39)
  • アイコン2015/10/05(Mon) 18:47:28 編集(投稿者)

    わかりづらい質問にもかかわらす、早速のご回答ありがとうございました。
    実施・確認させていただきました。リサイズ・移動したボタンがタブコントロール上に配置できました。

    【上記に関連する質問をさせてください。】
    このタブコントロール上に配置したリサイズボタンを(Form1は表示しないで)そのままの状態(ボタンを配置した状態)で保存する方法がわかりません。

     今の状態ですとタブコントロール上のリサイズボタンはForm1(※1)上に戻す(リサイズ実行前の状態に戻す)か、右クリックでリサイズボタンを閉じ、Form1を閉じてからでないとメインフォーム(※2)を閉じられない(SAVEボタンが押下できない)状態です。

    (※1:リサイズボタンのあるフォームです。)
    (※2:タブコントロールとForm1を呼び出すボタン・保存:SAVEボタンのある
    フォームです。)

    ・メインフォームからボタン押下⇒Form1上にリサイズできるボタンが作成されている⇒ボタンをリサイズして任意の位置に配置(ここまで教えていただきました。)

    ・リサイズした配置したボタンをそのままにForm1を閉じる⇒リサイズしたボタンを含めてメインフォームを「My.Settings.Save()」で画面イメージのまま保存・終了する。

    質問が要領悪く、たびたびお手数をおかけいたしまして済みませが、ご教示お願いいたします。

757×163 => 250×53
イメージ
1444038339.png
/58KB
引用返信 削除キー/
■33132 / inTopicNo.6)  Re[5]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ 魔界の仮面弁士 大御所(990回)-(2015/10/05(Mon) 19:58:43)
  • アイコン2015/10/05(Mon) 20:05:21 編集(投稿者)

    # 画像内のボタンのスペルが Botton (ぼっとん)になってる…。

    No33131に返信(はやぶささんの記事)
    >  今の状態ですとタブコントロール上のリサイズボタンはForm1(※1)上に戻す(リサイズ実行前の状態に戻す)か、右クリックでリサイズボタンを閉じ、Form1を閉じてからでないとメインフォーム(※2)を閉じられない(SAVEボタンが押下できない)状態です。

    No33124 → "FormX"、 "FormY"
    No33131 → "Form1"、"MainForm"、"mainフォーム"、"メインフォーム"

    と用語が統一されていないため、各画面が何の役割を担っているのか、
    画面イメージを見ても、非常に分かりにくいです…。


    > (※1:リサイズボタンのあるフォームです。)
    「リサイズボタン」というのが、どちらの意味なのか悩みました…。

    (A) リサイズ処理を開始するためのボタン(リサイズさせるのは、他のコントロール)
    (B) Resizeable なボタン


    > ・メインフォームからボタン押下⇒Form1上にリサイズできるボタンが作成されている⇒ボタンをリサイズして任意の位置に配置(ここまで教えていただきました。)

    メインフォームにあるボタンは、Form1 に「リサイズ可能なボタン」を
    作成するための物なのですね。

    実際にリサイズするには、ResizeBorderForm をモーダル表示する必要があるわけですが、
    現在は、ResizeBorderForm はどの処理で呼び出すようになっているのでしょうか?

    元のサンプル同様、ボタンを右クリックすることでリサイズを開始させるのか、
    それとも、Form1 にボタンを作成した時に、同時にリサイズを開始させているのか。


    > ・リサイズした配置したボタンをそのままにForm1を閉じる⇒リサイズしたボタンを含めてメインフォームを「My.Settings.Save()」で画面イメージのまま保存・終了する。
    リサイズしたボタンが置いてあるのは Form1 なのですよね。
    だとしたら、メインフォームで Save するのではく、
    Form1 側で Save した方が管理しやすい気がします。

    リサイズ完了時(ResizeBorderForm が閉じられたとき)に保存してもよいですし、
    Form1 の FormClosing イベントあたりで保存しても良いですが。

    保存する項目としては、

    ・どの TabPage 上に配置したのか(Parent プロパティ)
    ・TabPage 上のどこにどのサイズで配置したのか(Bounds プロパティ)

    ですかね。読み込みはその逆ということで。
引用返信 削除キー/
■33134 / inTopicNo.7)  Re[6]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ はやぶさ 一般人(5回)-(2015/10/06(Tue) 12:00:12)
  • アイコン毎度ご迷惑をおかけして申し訳ありません。

    再度図を整理させていただきます。
    ・MainForm(図1):以下の@〜Bが設定されています。
    @tabControl
    AForm1を呼び出すための「Button2(Control)」
    B「Save(ボタンコンロトール=My.Settings.Save())」

    ・Form1(図2):MainFormの「Button2」から呼び出されるフォームです。
    @「Button1(Control)」と「Resize(mnuResize)」を設定しています。
    A「Button1」を右クリックして「ResizeBorderForm」を呼び出す。 

    > (B) Resizeable なボタン
    のつもりだったのですが、混同しているような名称を使用して申し訳ありません。
    >
    > メインフォームにあるボタンは、Form1 に「リサイズ可能なボタン」を
    > 作成するための物なのですね。
    はい。そうなります。(図1のButton2にあたります。)

    > 元のサンプル同様、ボタンを右クリックすることでリサイズを開始させるのか、
    Form1の「Button1(Control)」を右クリックした時に「ResizeBorderForm」が呼び出されます。
    (元のサンプルと同様です。)
    >
    > リサイズしたボタンが置いてあるのは Form1 なのですよね。

    表現が紛らわしくてすみません。
    リサイズしたボタンはMainFormに移動させます。
    リサイズしたボタンをMainFormの任意のタブコントロールに移動させ、
    そのタブ内の任意の位置にボタンがある状態でSaveしたいという意味です。(図3)

    元のサンプルのボタンをそのままMainFormの画面のカスタマイズに使用させたいので
    MainFormに追加・保存したいのですが方法がわかりません。

    お忙しいところ度々申し訳ありませんが、ご教示お願いします。
700×144 => 250×51
イメージ
1444100412.png
/28KB
引用返信 削除キー/
■33136 / inTopicNo.8)  Re[7]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ 魔界の仮面弁士 大御所(991回)-(2015/10/06(Tue) 15:08:30)
  • アイコン2015/10/06(Tue) 15:10:42 編集(投稿者)

    No33134に返信(はやぶささんの記事)
    > ・Form1(図2):MainFormの「Button2」から呼び出されるフォームです。
    > @「Button1(Control)」と「Resize(mnuResize)」を設定しています。
    > A「Button1」を右クリックして「ResizeBorderForm」を呼び出す。 

    MainForm.Button2 の Click 時に、Form1 を経由させることなく、
    直接 MainForm 上に Resizable な Button を表示させるべきかと
    思いますが、Form1 を経由させているのは何のためでしょうか?

    Form1 には、ただ無造作に Button が置いてあるだけに見えますし、
    提示頂いた資料からだと、Form1 の存在意義が良く分かりませんでした。



    話を聞く限りでは、下記のような実装にした方が使いやすいと思います。


    (1) ユーザーは、MainForm 上の TabControl1 を操作し、
     ボタンを配置させたい TabPage を表示させておく

    (2) その状態で、MainForm の「ボタン作成」ボタンを押す
     → TabPage 上に、「リサイズ可能なButton」が、
      ドラッグ可能な状態(ResizableForm表示状態)で追加される

    (3) ユーザーは、ドラッグ操作でボタンの位置とサイズを修正し、
     ResizableForm を閉じて決定する


    手順 2 のコードは、こんなイメージで。

    Public Class MainForm
     Private Sub Button1_Click() Handles Button1.Click
      'ボタンを作成(.Name や .Text もセットすること)
      Dim btn As New Button() With {.Text = "NewButton"}

      'アクティブな TabPage 上に配置
      TabControl1.SelectedTab.Controls.Add(btn)

      '初期サイズ、フォント、色なども指定しておきましょう
      btn.SetBounds(10, 10, 75, 32)

      'ユーザー配置モード
      Using resizer As New ResizeBorderForm(btn)
       resizer.ShowDialog()
      End Using
     End Sub
    End Class


    ついでに言えば、手順 3 のところで配置をキャンセル可能にしておくと
    使いやすくなると思います。たとえば、ResizeBorderForm 側で
    DialogResult を返却できるようにしておき、呼び出し側をこんな感じに修正。

     Using resizer As New ResizeBorderForm(btn)
      If resizer.ShowDialog() = System.Windows.Forms.DialogResult.Cancel Then
       '配置をキャンセルされた場合は、ボタンを削除
       btn.Parent = Nothing
       btn.Dispose()
      End If
     End Using

    ResizeBorderForm で DialogResult を返すようにするためには、
    元記事の追記にあるように、ResizeBorderForm の右上に、
    クローズボタン(OK 用/Cancel 用)を Anchor = "Top, Right" モードで
    配置しておき、ResizeBorderForm の AcceptButton / CancelButton プロパティに
    割り当てておくと良いでしょう。
    この方法だと、マウス操作だけでなく、Enter / Esc キー操作でも、
    ボタン位置の確定/キャンセルが行えるようになります。
引用返信 削除キー/
■33137 / inTopicNo.9)  Re[8]: タブの上にあるボタンのサイズ変更、位置移動する方法
□投稿者/ はやぶさ 一般人(6回)-(2015/10/06(Tue) 15:45:28)
  • アイコンNo33136に返信(魔界の仮面弁士さんの記事)
    > 2015/10/06(Tue) 15:10:42 編集(投稿者)
    >
    早速のお返事ありがとうございます。

    > 思いますが、Form1 を経由させているのは何のためでしょうか?
    コードがかなり大きいので、いくつかに分割した方が保守的に楽かな?とおもっただけですので、理由といったほどの理由ではありません。

    教えてただいた方法で作ってみようと思います。
    拙い内容でお願いしましてお手数おかけしました。

    本当にありがとうございました。
解決み!
引用返信 削除キー/



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

このトピックに書きこむ

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

Mode/  Pass/


- Child Tree -