PowerTools PlusPak for Windows Forms 8.0J
GcResizeコンポーネントの使用

GcApplicationResize コンポーネントで、GcResizeコンポーネントを利用する方法について、以下に解説します。

関連付けられたGcResizeコンポーネント
GcApplicationResizeクラスのGetGcResizeメソッドを使用して、特定のフォームに関連付けられた GcResizeコンポーネントをコードにより取得できます。このメソッドは GcApplicationResize オブジェクトのインスタンスの有無に関わらず利用できます。

Imports GrapeCity.Win.Components

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim subForm As New Form2()

    Dim gcResize As GcResize = GcApplicationResize.GetGcResize(subForm)

    If gcResize Is Nothing Then
        MessageBox.Show("Form2にGcResizeコンポーネントはありません。")
    Else
        MessageBox.Show("Form2にGcResizeコンポーネントがあります。")
        gcResize.AboutBox()
    End If

    subForm.Show()

End Sub
using GrapeCity.Win.Components;

private void button1_Click(object sender, EventArgs e)
{
    Form2 subForm = new Form2();

    GcResize gcResize = GcApplicationResize.GetGcResize(subForm);
    if (gcResize == null)
    {
        MessageBox.Show("Form2にGcResizeコンポーネントはありません。");
    }
    else
    {
        MessageBox.Show("Form2にGcResizeコンポーネントがあります。");
        gcResize.AboutBox();
    }
    subForm.Show();
}
フォームごとに割り当てられたGcResizeのイベント
以下の手順では、フォームごとに GcApplicationResize コンポーネントによって割り当てられた GcResize コンポーネントのイベントを使って、リサイズ時に各フォームのタイトルバーにフォームのサイズを表示します。
  1. Windows Formsプロジェクトを新規に作成します。
  2. フォーム(Form1)にボタン(Button1)を追加します。
  3. 新たにフォーム(Form2)を追加します。
  4. Form2に任意のボタンやテキストボックスコントロールなどを追加します。
  5. Form1のButton1のClickイベントに次のコードを実装し、ボタンクリックによりForm2が表示されるように設定します。
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim f2 As New Form2()
        f2.Show()
    End Sub
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Show();
    }
  6. フォーム(Form1)にGcApplicationZoomコンポーネント(GcApplicationZoom1)を追加します。
  7. 次のように実装します。
    Imports GrapeCity.Win.Components
    
    Private Sub GcApplicationResize1_GcResizeAttaching(sender As Object, e As GcResizeAttachingEventArgs) Handles GcApplicationResize1.GcResizeAttaching
        ' Form2にGcResizeイベントの追加
        If TypeOf e.Form Is Form2 Then
            AddHandler e.GcResize.ControlResizing, AddressOf GcResize_ControlResizing
        End If
    End Sub
    
    Private Sub GcApplicationResize1_GcResizeDetached(sender As Object, e As GcResizeDetachedEventArgs) Handles GcApplicationResize1.GcResizeDetached
        If TypeOf e.Form Is Form2 Then
            RemoveHandler e.GcResize.ControlResizing, AddressOf GcResize_ControlResizing
        End If
    End Sub
    
    Private Sub GcResize_ControlResizing(sender As Object, e As EventArgs)
        Dim gcResize As GcResize = DirectCast(sender, GcResize)
        Dim form As Form = form.ActiveForm
        form.Text = String.Format("Width:{0}、Height:{1}", form.Width, form.Height)
    End Sub
    using GrapeCity.Win.Components;
    
    private void gcApplicationResize1_GcResizeAttaching(object sender, GrapeCity.Win.Components.GcResizeAttachingEventArgs e)
    {
        // Form2にGcResizeイベントの追加
        if (e.Form is Form2)
        {
            e.GcResize.ControlResizing += GcResize_ControlResizing;
        }
    }
    
    private void gcApplicationResize1_GcResizeDetached(object sender, GrapeCity.Win.Components.GcResizeDetachedEventArgs e)
    {
        if (e.Form is Form2)
        {
            e.GcResize.ControlResizing -= GcResize_ControlResizing;
        }
    }
    
    public void GcResize_ControlResizing(object sender, GrapeCity.Win.Components.GcResizeEventArgs e)
    {
        GcResize gcresize = sender as GcResize;
        Form form = Form.ActiveForm;
        form.Text = string.Format("Width:{0}、Height:{1}", form.Width, form.Height);
    }
  8. プロジェクトを実行し、Form1のButton1をクリックし、Form2を表示します。
  9. Form2のリサイズを行います。

  • ユーザーが現在操作しているフォームにアクセスするには、System.Windows.Forms.FormクラスのActiveFormプロパティを使用します。
  • ユーザーが現在操作しているフォームの GcResize コンポーネントは、sender 引数で参照できます。
  • GcResize コンポーネントのイベントは、GcApplicationResize.GcResizeDetached イベントで削除(解放)する必要があります。
リサイズ後のコントロール追加
GcApplicationResizeコンポーネントの影響化にあるフォームに対し、リサイズが発生した後にSystem.Windows.Forms.ControlCollectionのAddメソッドを使用して動的にコントロールを追加する場合は追加処理の前後でBeginAddControlsおよびEndAddControlsメソッドをコールする必要があります。
BeginAddControlsおよびEndAddControlsメソッドを利用せず、 Addメソッドのみを使用して動的にコントロールの追加を行うと、適切な拡縮率がコントロールに適用されません。

以下のサンプルコードでは、動的に追加したボタンコントロールに適切な拡縮率が適用されます。
'コントロール追加前にBeginAddControlsメソッドをコールします。
GcApplicationResize1.BeginAddControls(Me)
'ボタンコントロールを生成します。
Dim newButton As New Button()
newButton.Location = New Point(0, 0)
newButton.Size = New Size(100, 30)
newButton.Text = "Added Button"
'フォームへボタンコントロールを追加します。
Me.Controls.Add(newButton)
'コントロール追加後にEndAddControlsメソッドをコールします。
GcApplicationResize1.EndAddControls(Me)
//コントロール追加前にBeginAddControlsメソッドをコールします。
gcApplicationResize1.BeginAddControls(this);
//ボタンコントロールを生成します。
Button newButton = new Button();
newButton.Location = new Point(0, 0);
newButton.Size = new Size(100, 30);
newButton.Text = "Added Button";
//フォームにボタンコントロールを追加します。
this.Controls.Add(newButton);
//コントロール追加後にEndAddControlsメソッドをコールします。
gcApplicationResize1.EndAddControls(this);

下記のような初期サイズのフォームとボタンコントロールを例に、BeginAddControlsおよび EndAddControlsメソッドを使用して動的にコントロールを追加した際の動作について解説します。


フォームのリサイズ後、BeginAddControlsおよび EndAddControlsメソッドを使用して動的にコントロールを追加すると以下のような結果となります。


このとき、BeginAddControlsおよび EndAddControlsメソッドを使用しないと、適切な拡縮率が適用されずコントロールの一部(フォントサイズなど)に意図しない拡大や縮小が発生します。

参照