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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.39043 の関連記事表示

<< 0 >>
■39043  フォームのコントロールボックスを使う
□投稿者/ hs -(2009/07/29(Wed) 17:42:14)

    分類:[.NET 全般] 

    VS2008-VB

    いつもお世話になっております。

    現在、FormBorderStyle = Windows.Forms.FormBorderStyle.None のフォームを作成しております。
    当然この場合フォームのサイズ調整ができない、コントロールボックス(最小・最大・閉じる)が使えない。

    しかし、Windows.Forms.FormBorderStyle.None の状態でサイズ調整が行えて、かつコントロールボックスを使いたいと思っています。
    この状態でフォームサイズの調整ができる手法は下記サイトで見つけれたのですが。
    http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=8372&reno=8222&oya=8209&mode=msgview&page=0

    なんとかフォームのコントロールボックスを単独で使用できる手法はないものかと考えております。

    よろしくお願いいたします。
親記事 /過去ログ67より / 関連記事表示
削除チェック/

■39044  Re[1]: フォームのコントロールボックスを使う
□投稿者/ aetos -(2009/07/29(Wed) 18:20:35)
>
    No39043 (hs さん) に返信

    それならどうして FormBorderStyle を None にしてるんです?
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39046  Re[2]: フォームのコントロールボックスを使う
□投稿者/ ぽぴ王子 -(2009/07/29(Wed) 18:30:49)
>
    またムチャなこと言ってくるなあ…

    FormBorderStyle が Sizable と同等の状態で、なおかつウィンドウの枠は出さないという
    ことですか?

    私も aetos さんと同じで、なぜ FormBoderStyle を None にしているのか、がわからないです。
    ウィンドウの枠を出したくないということなのだとしても、なぜ出したくないのか?から疑問
    なので、その辺は素直な疑問です。

    僕もそんなに詳しいわけじゃないですが、Sizable の時の枠って「ここはサイズ変更可能なところ
    なんだよ!」という意味でついているんだと思っています。ところがそれを無くしたいということは
    何らかの理由があるはずですよね。Windows の UI に逆らってまでなんとかしたい理由というものが。
    ちょっとそれを教えていただきたいなと。

    ちなみにやろうとした場合、FormBoderStyle を Sizable にして、無理矢理ウィンドウの枠を表示
    しないようにするとか(できるのかどうかはともかく)、FormBoderStyle は None のままにして
    コントロールボックスやフォームサイズの変更部分を自前でなんとかするか(リンク先の方法に
    近いと思います)ぐらいしか思い浮かびませんでした。
    自分がそういったことをしろと言われたら「できません」と言って泣きを入れます。たいてい
    そういったインターフェースってのは、何も考えずに「これカッコイイ!」とか言って提案した
    ものだったりして、仕様レベルで覆せるものだったりすることが多いので。
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39048  Re[3]: フォームのコントロールボックスを使う
□投稿者/ hs -(2009/07/29(Wed) 19:09:20)
    No39044 (aetos さん) に変身
    > それならどうして FormBorderStyle を None にしてるんです?

    タイトルバーのキャブション部分が不要だからです。
    逆に言うとその部分ぐらい我慢すればよいのでしょうし、それだけのために無駄なコードを何行も記述しなければならないですし、
    ただ、そこがどうしても妥協できない部分なのです。
    イメージで言うとApple社のiTunesやSkypeのキャプション部分にメインメニューがある、あのイメージを実現したいだけなのですが...;

    No39046 (ぽぴ王子 さん) に返信
    > 自分がそういったことをしろと言われたら「できません」と言って泣きを入れます。

    今回は、自分がやりたいと思っている事なのです。

    > たいていそういったインターフェースってのは、何も考えずに「これカッコイイ!」とか言って提案した
    > ものだったりして

    恥ずかしながら、そのとおりです;

    > 仕様レベルで覆せるものだったりすることが多いので。

    VSを初めて約5か月になります。今まではAccessで社内向けのシステムを担当していてデザインとか正直二の次の仕事をしてきました。
    VS2008が凄いのかわかりませんが、Accessでできない事が、簡単に実現できる様になって、何でもやってみたくなるんです;
    また、今回開発しているシステムの対象ユーザーは、中学生から高校生で、インターフェイスには高校生の意見を参考にデザインしています。

    もし今回の質問が実現可能であれば、ご教授よろしくおねがいします。
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39052  Re[4]: フォームのコントロールボックスを使う
□投稿者/ まどか -(2009/07/29(Wed) 19:51:55)
    ボーダー無しにこだわるなら、フォームにボタン貼り付けるだけでいいような。
    見た目をそれっぽくなら、そのボタンをオーナードローで自分で描画すると。
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39053  Re[5]: フォームのコントロールボックスを使う
□投稿者/ やじゅ -(2009/07/29(Wed) 20:04:35)
>
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39050  Re[4]: フォームのコントロールボックスを使う
□投稿者/ こうへい -(2009/07/29(Wed) 19:47:00)
    FormBorderStyle を Sizable にして
    タイトルバー(やWindowの枠)は Form.Region で隠す
    右上にボタンを3つ置いてそれぞれの動作は自前で実装する
    ってのをやった事があります
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39054  Re[4]: フォームのコントロールボックスを使う
□投稿者/ 渋木宏明(ひどり) -(2009/07/29(Wed) 20:06:13)
>
    > もし今回の質問が実現可能であれば、ご教授よろしくおねがいします。

    要件として「デザイン優先」てのがあるなら止めはしないけど、プロパティの設定程度で簡単に出来たりはしないですよ。

    FormBorderStyle = Windows.Forms.FormBorderStyle.None;

    とした以上、都合良くコントロールボックスだけを使用するなんてことはできません。

    GetSystemMenu() API でシステムメニューが取得できるので、それを TrackPopupMenu() や TrackPopupMenuEx() API で表示すればよろしんじゃないでしょうか。

    コントロールボックスの身代わりには、PictureBox とかでいいんじゃないでしょうか。(通常のボタンみたいにクリックした時へこむ必要ないし)
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/

■39057  Re[4]: フォームのコントロールボックスを使う
□投稿者/ 魔界の仮面弁士 -(2009/07/29(Wed) 20:50:09)
    2009/07/29(Wed) 21:06:41 編集(投稿者)

    # しまった。。。この実装方法だと、最大化すると困った事になる…。

    No39048 (hs さん) に返信
    > タイトルバーのキャブション部分が不要だからです。

    サイズ変更可能なまま、タイトルバーを消してみました。
    単にリージョンを切っただけなので、上方向へのリサイズができないという手抜き実装ですが。


    ' %WINDIR%\Microsoft.NET\Framework\v3.5\VBC.EXE /T:WINEXE SAMPLE.VB
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports System.Drawing.Drawing2D
    Public Class Form1 : Inherits Form
    Public Shared Sub Main()
    Application.Run(New Form1())
    End Sub
    Private Declare Auto Function SendMessage Lib "user32" _
    (ByVal hWnd As IntPtr, ByVal message As Integer, _
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private oldRegion As Region
    Private Sub Form1_Load() Handles MyBase.Load
    oldRegion = Me.Region()
    Dim q = Aggregate scr In Screen.AllScreens Into _
    L = Min(scr.Bounds.Left), _
    T = Min(scr.Bounds.Top), _
    B = Max(scr.Bounds.Bottom), _
    R = Max(scr.Bounds.Right)
    Dim offset = Me.RectangleToScreen(Me.ClientRectangle).Top - Me.Top
    Dim fullScreenSize As New Rectangle(q.L, q.T + offset, q.R - q.L, q.B - q.T - offset)
    Using path As New GraphicsPath()
    path.AddRectangle(fullScreenSize)
    Me.Region = New Region(path)
    End Using
    Dim btn As New Button() With { .Text = "★" }
    AddHandler btn.Click, Function() SendMessage(Handle, &H313, 0, Cursor.Position.X Or Cursor.Position.Y * &H10000)
    Controls.Add(btn)
    End Sub
    Private Sub Form1_FormClosing() Handles Me.FormClosing
    Hide()
    Using r As Region = Me.Region
    Me.Region = oldRegion
    End Using
    End Sub
    End Class
記事No.39043 のレス /過去ログ67より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -