- PR -

別窓を最前面で表示したい

1
投稿者投稿内容
はっちん
会議室デビュー日: 2006/02/06
投稿数: 9
投稿日時: 2006-02-15 22:56
いつも参考にさせていただいてます。
現在ASP.NETで開発を行っています。

■■■やりたい事■■■
@ページロードでメイン画面を表示する。
 ※データグリッドにデータを表示
Aプレビューボタンをクリックし、印刷プレビュー画面を別窓で表示する。
 ※プレビュー画面を最前面で表示

■■■問題点■■■
NW.focus(); でフォーカスを設定しているのですが、
ロード中は最前面に表示されるものの、ロードが完了すると
メイン画面の背面に隠れてしまいます。
どうやったら最前面に表示できるのでしょうか?
ご存知の方がいらっしゃいましたらご教授願います。

■■■ソース■■■
@ページロードイベント
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not Page.IsPostBack Then
  '' ボタンに「オンクリックイベントを追加
btnPrev.Attributes.Add("onClick", "javascript:NewOpen()")
End If
End Sub

AHTML
<HTML>
 <HEAD>
  <script language="javascript">
function NewOpen() {
NW=window.open("○○××.aspx","ウィンドタイトル");
NW.focus();
}
  </script>
 </HEAD>
</HTML>
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-15 23:25
showModalDialog ではダメでしょうか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Katze
ベテラン
会議室デビュー日: 2005/11/01
投稿数: 74
お住まい・勤務地: 1台でも せんだい
投稿日時: 2006-02-16 10:13
はずしてるかもしれませんが、

NW.focus();
の次に
self.blur();

をおこなったらどうでしょうか?

# 記憶違いかもしれませんが、メイン画面でSmartNavigation=True
# になっていると こういう現象が起きたような・・・
# メイン画面でTrueになっていたら、Falseにしたら直るかも


[ メッセージ編集済み 編集者: Katze 編集日時 2006-02-16 17:00 ]
.NetShin
会議室デビュー日: 2005/09/16
投稿数: 11
お住まい・勤務地: 東京都港区
投稿日時: 2006-02-17 13:50
私も同じ現象で悩んでいましたが、

別窓表示時に、SmartNavigation=Falseにしたら解決しました!
別画面側で、PageLoad時にテキストボックスにSetFocusして回避してましたが
おかげで、スムーズな画面表示になりました。
はっちん
会議室デビュー日: 2006/02/06
投稿数: 9
投稿日時: 2006-02-18 08:41
じゃんぬねっとさん、Katezeさん、.NetShinさん返信ありがとうございます。

SmartNavigation=trueが原因ですね。。。
SmartNavigation=Falseにすることで
window.open("○○××.aspx","ウィンドタイトル");
で問題なく最前面に表示されます。

ただSmartNavigation=Falseにするとポストバック時に
画面がリロードされるためウィンドのスクロールが動いてしまいますよね?
※スクロールバーが初期位置に戻る

これはJavaScriptで作りこむことで解決しました。
後でプログラムを紹介させていただきます。
はっちん
会議室デビュー日: 2006/02/06
投稿数: 9
投稿日時: 2006-02-23 07:12
スマートナビゲーションを使用せず、ポスとバックが発生した場合、画面の位置をキープするJAVAScriptを紹介します。


@BODYにロードとスクロールのイベントを登録する。

<body onload="LoadEvent()" onscroll="ScrollEvent()">

Aフォームの先頭にHidden属性のINPUTコントロールを2つ準備する。

<form>
<input type="hidden" id="scrllLeft" runat="server"/>
<input type="hidden" id="scrllTop" runat="server"/>

Bロードとスクロールのイベントを実装する。formタグの終了直前に挿入する。

<script type="text/javascript"><!--
function LoadEvent()
{
window.scrollTo(document.all("ScrllLeft").value, document.all("scrllTop").value);
}

function ScrollEvent()
{
document.all("ScrllLeft").value = window.document.body.scrollLeft;
document.all("scrllTop").value = window.document.body.scrollTop;
}
--></script>
</form>

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-02-23 22:24
そのコード、どっかで見たぞ?(笑)

 検証コントロールを置くと、body.onload などが検証コントロール用に置き換わるそうなので(未確認)、これではまずいかもしれません。川端さんのサイトにあったんだけど、閉まっているんだよな。。。
おお!こっちに抜き出していました!!→SmartNavigation = True について

 最近、「サーバーコントロール」にしてくださっているのを見かけたような気がするんだけどorz
1

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