- PR -

ShowDialogについて

1
投稿者投稿内容
TAKAMIKI
常連さん
会議室デビュー日: 2005/01/13
投稿数: 33
投稿日時: 2005-02-08 19:09

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

そして、また質問です。

Form1からShowDialogをよびます。

そのとき、Form1の上にShowDialogで開いたフォームが表示されます。

そのShouDialogで開いた画面の移動を可能にしたいです。

今だと、指定した(Manual)位置にフォームが開かれ、移動ができません。

いろいろ試しましたがうまくいきません。

ShowDialogでは開いた画面の場所を自由に動かすことはできないのでしょうか。

よろしくお願いします。
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-02-08 20:08
自分の環境(VS.NET2003)で試してみたら、普通に動かせるんですが…

以下のことを試してみてください。

@プロジェクトメニューのWindowsフォームの追加から、
 新しいフォームを追加(Form1.vbとします)
AForm1.vbのStartPositionプロパティとLocationプロパティだけ設定し、
 他は全部デフォルトのままにする
B問題のコードのとこで、試しに
  Dim frmTemp As New Form1
  frmTemp.ShowDialog()
と書いて動かしてみる。

これでForm1が動かせるようなら、問題のFormに、
何か余計なコードかプロパティが入っていることになります。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-02-09 09:07
私が思いつく状況としては、フォームのプロパティを

・ControlBox=False
・Text=""

のように設定すると、フォームを移動できなくなります。(ウィンドウ上部のバーが非表示になるので)

引用:

ShowDialogでは開いた画面の場所を自由に動かすことはできないのでしょうか。



と思われたのであれば、ぼのぼのさんが書かれたような単純化したコードを実行して動作を確かめるべきでしょう。
この単純化したコードがうまくいくようであれば、別の箇所に問題がある、ということです。
TAKAMIKI
常連さん
会議室デビュー日: 2005/01/13
投稿数: 33
投稿日時: 2005-02-09 10:12

ぼのぼのさん、kanaiさん、お返事ありがとうございます。

ぼのぼのさんのおっしゃるとおり新たなFormを作成し実行してみました。

悩んでいた画面と同じプロパティーを設定したところ・・・

動くではありませんか?!

コードをよ〜くみてみると・・・余計な記述が・・・。←コメントにしたら動きます。

フォームをコピーしたときに消すのを忘れていました。

単純なミスでした、皆様にご迷惑をおかけしました。

ちなみに・・・。

画面を動かさないようにしていた関数を明記しときます。(せめても)

いつか誰かの役にたつことを願って・・・。

'****************************************************************************
'[ID]WndProc
'[機能]Windows メッセージを処理します。
'[説明]タイトルバーをつかんでウィンドウを移動できなくします。
'[引数]m - 処理対象の Windows Message
'[戻値]
'[履歴]
'****************************************************************************
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
' 定数値は WinUser.h を参照
Const HTCAPTION As Integer = 2
Const HTBORDER As Integer = 18
Const WM_NCHITTEST As Integer = &H84


Select Case m.Msg
Case WM_NCHITTEST
' マウスが非クライアントスクリーン領域のどこかにあるとき、
' Windows はその位置を厳密に調べるためにこのメッセージを送ります。

' とりあえず既定の処理をします。
MyBase.WndProc(m)

' マウスがタイトルバー領域にある場合は HTBORDER を返します。
If m.Result.ToInt32() = HTCAPTION Then
' HTBORDER は太い(リサイズ可能な)フレームを持たないウィンドウのボーダーを
' ユーザーがクリックしたときにデフォルトウィンドウプロシジャが返す値と同じです。
m.Result = New IntPtr(HTBORDER)
End If
Case Else
MyBase.WndProc(m)
End Select
End Sub

1

スキルアップ/キャリアアップ(JOB@IT)