VB.NET質問スレ (Part24)

このエントリーをはてなブックマークに追加
952デフォルトの名無しさん:2008/02/20(水) 16:54:44
acropdf.dllにそういうメソッドはないかの?
953デフォルトの名無しさん:2008/02/20(水) 20:11:58
ちょっと質問させてください。
ASP.NET 2.0(VB)でブラウザの戻るやページ内でバックスペースを押したときに

Web ページの有効期限が切れています

と表示されるページがありますが、あのように動作させるにはGlobal.asaxあたりに何か設定する必要があるのでしょうか?
それともIISに設定があったりするのでしょうか?
(その画面の時にF5などで更新を押すと 再送信しますか? と聞かれますがそのあたりも制御できるのでしょうか?)

今一歩そのあたりの深い部分が探しきれないので、ご存知の方がいらっしゃいましたらご教授いただければと思います。
954デフォルトの名無しさん:2008/02/20(水) 21:12:30
>>953
「あのように」がどのようになのかさっぱりわからん
とりあえず、まずはPOSTリクエストについて調べろ
955デフォルトの名無しさん:2008/02/20(水) 21:24:35
>>954
レスサンクスです。

動きとしては
ページ表示→遷移→戻るボタン(またはバックスペース)→Web ページの有効期限が切れていますと表示されているIEのエラーページ
この動作を実現させたいのです。

POSTリクエスト・・・とりあえずググってきます。
956デフォルトの名無しさん:2008/02/20(水) 21:34:36
Expiresヘッダをなんとかして出せばよろし。
957デフォルトの名無しさん:2008/02/20(水) 22:06:49
>>956
各ページのLoad時
Headerにこのようなものを出力するようにしてみました。

<meta http-equiv="Expires" content="0" />
<meta http-equiv="pragma" content="no-cache" />

実現方法は以下のとおりです。

Dim meta1 As New Web.UI.HtmlControls.HtmlMeta
meta1.HttpEquiv = "Expires"
meta1.Content = "0"
Me.Header.Controls.Add(meta1)

Dim meta2 As New Web.UI.HtmlControls.HtmlMeta
meta2.HttpEquiv = "pragma"
meta2.Content = "no-cache"
Me.Header.Controls.Add(meta2)

'キャッシュ制御は以下のようにGlobal.asaxでリクエスト時に必ず設定するようにしてみました。
With HttpContext.Current.Response
.Cache.SetCacheability(HttpCacheability.ServerAndNoCache)
.Cache.SetAllowResponseInBrowserHistory(False)
End With
これだとキャッシュは作成されず、何かの原因で作成されたとしても有効期限0になると思っているのですが・・・

正常にメタタグは出力されているのですが、どうにも思った動きになりません。
この設定が悪いのでしょうか?それとも何かほかに設定が・・・
958デフォルトの名無しさん:2008/02/21(木) 11:12:54
ツールストリップに動的にボタンを貼り付けたいと思い、下記のように
AddHandlerに渡すメニューイベントを引数にして関数を呼び出したいのですが
(1)でメニューイベントとして解釈させる方法がわかりません。
DirectCastしようにもXXXXXの部分がわかりません。
ご教授の程よろしくお願いいたします。


Public Sub SetButton(ByVal S As String, MenuEbvent As Object)
Dim item As New ToolStripButton

item.Text = S
AddHandler item.Click, AddressOf DirectCast(MenuEvent, XXXXX) ==>(1)
ToolStrip.Items.Add(item)

End Sub


SetButton("Menu1", ToolStripMenuItem1_Click)
SetButton("Menu2", ToolStripMenuItem2_Click)

959デフォルトの名無しさん:2008/02/21(木) 13:30:46
初心者ですみません><質問なのですが(ここであってるのかな^^;)
今VB2005でwebページを作成しているのですが、
そのなかでデザイナ側でGridViewのitemTemplateにCheckBoxを配置しているのですが
それをソースコード上で記述して再現したいのですが、どのようにすればいいのかご教授願えませんでしょうか?

例えばボタンをGridViewに追加の場合だと

Dim Button1 As ButtonField = New ButtonField
Button1.HeaderText = "選択"
Button1.Text = "選択"
Button1.ButtonType = ButtonType.Button
.Columns.Add(Button1) : Button1 = Nothing

といった感じででうまくいくのですが
TemplateでitemTemplateにCheckBoxを作成の場合ではどう記述すればいいのかわかりません

Dim TemplateF As TemplateField = New TemplateField
TemplateF.ItemTemplate = New ????
TemplateF.HeaderText = "ABC"
TemplateF.????
TemplateF.????
.Columns.Add(TemplateF) : TemplateF = Nothing
960デフォルトの名無しさん:2008/02/21(木) 13:33:09
あ、上げた方がいいのかな

いきなりの長文もうしわけないです
961至急求む:2008/02/21(木) 15:19:48
VS2005アカデミック、WindowsXpで以下のプログラムを
動かしたい。しかし
Imports System.Managementが参照できないのだが、どうしたらいい?

Imports System
Imports System.Management
Imports System.Windows.Forms
Namespace WMISample
Public Class MyWMIQuery
Public Overloads Shared Function Main() As Integer
Try
Dim searcher As New ManagementObjectSearcher( _
"root\WMI", _
"SELECT * FROM ProcessorPerformance")
For Each queryObj As ManagementObject In searcher.Get()
Console.WriteLine("-----------------------------------")
Console.WriteLine("ProcessorPerformance instance")
Console.WriteLine("-----------------------------------")
Console.WriteLine("Active: {0}", queryObj("Active"))
Next
Catch err As ManagementException
MessageBox.Show("An error occurred while querying for WMI data: " & err.Message)
End Try
End Function
End Class
End Namespace
962デフォルトの名無しさん:2008/02/21(木) 15:28:13
>>961
参照設定は済ませたか?
963至急求む:2008/02/21(木) 16:02:44
>962
 そそれがわからない。
 参照の追加のCOMとか色々みてもない。ない。

 あっといけた。いけた。よろこべ。でけた。

964デフォルトの名無しさん:2008/02/21(木) 16:13:33
まて、急いでるのはわかるが、後続のために具体的にどうしたのかは書け。
965959:2008/02/21(木) 16:17:30
すみません先程の>>959ですが
なんとか以下のプログラム記述でGridView内にCheckBoxを表示する段階まではもっていけたのですが
Public Class MyTemplate
Implements ITemplate
Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
Dim cb As New CheckBox
cb.ID = "CheckBoxABC"
container.Controls.Add(cb)
End Sub
End Class
---------------
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
With Me.GridView1
Dim tmpF As TemplateField = New TemplateField
tmpF.ItemTemplate = New MyTemplate()
tmpF.HeaderText = "あああ"
.Columns.Add(tmpF) : tmpF = Nothing
End With
End Sub
以下のような感じで生成したGridViewのチェックボックスにアクセスしようとすると
------
NullReferenceExceptionはユーザーコードによりハンドルされませんでした
オブジェクト参照がオブジェクト インスタンスに設定されていません
------
というエラーが発生してしまいます。
↑の通りNULLアクセスになっているようなのですが、CheckBox(?)の
インスタンスをどこでどうやって生成すればよいのでしょうか?今日一日ずっとこれやってますけどもうお手上げだーw
For i = 0 To Me.GridView1.Rows.Count - 1
CType(Me.GridView1.Rows(0).FindControl("CheckBoxShop"), CheckBox).Checked = True
Next
あと、名前つけ忘れてました、すみません
966959:2008/02/21(木) 17:11:16
うう・・返事がない
967デフォルトの名無しさん:2008/02/21(木) 17:20:57
そろそろ次立てる頃?
968デフォルトの名無しさん:2008/02/21(木) 17:42:40
>>958
C#だとそういう記述でできるけど、VBはC#とイベントの取り扱い方が違うからその方法では無理。

今から正解作るからちょっと待ってて
969968:2008/02/21(木) 18:34:53
VBで書こうとして気づいた。

C#だと簡単なのにVBだと書けないや。
RaiseEventだと自身のイベント以外は呼び出せないみたいだし。
イベントの取り扱い方に制限が掛かってて無理っぽいよ。
970デフォルトの名無しさん:2008/02/21(木) 18:37:26
New EventHandler(AddressOf メソッド名)
AddHandler イベント, DirectCast(obj, EventHandler)
971デフォルトの名無しさん:2008/02/21(木) 18:56:30
そんな説明じゃ968や958にはわからないと思うよ。
まあ要はデリゲートを勉強しろってことだけどさ。
972968:2008/02/21(木) 19:06:50
失礼、普通にできたな。
AddressOf演算子というものを使うわけだな。
下記のコードで、ButtonクリックでToolStripMenuItem1_Clickメソッドが呼び出されることが可能になった。


Public Class Form1

Public Sub SetButton(ByVal S As String, ByVal MenuEbvent As EventHandler)
Dim item As New Button()
item.Text = S
item.Dock = DockStyle.Fill
AddHandler item.Click, MenuEbvent
Me.Controls.Add(item)
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
SetButton("Menu1", AddressOf ToolStripMenuItem1_Click)
End Sub

Private Sub ToolStripMenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripMenuItem1.Click
MessageBox.Show("OK")
End Sub
End Class
973デフォルトの名無しさん:2008/02/21(木) 19:33:01
AddreesOf知らないで今までどういう「イベントを使うコード」
書いてたんだろう968はw

というか、だから本当はデリゲートを理解してないのが問題なんだよ。
974968:2008/02/21(木) 20:13:25
>>973
あほかと・・・w
C#にAddressOfなんてないんだよ。
随分必死だなお前w

自作のユーザーコントロールにイベントデリゲートを宣言して、
自作イベントを外から扱ったりしてますけども。
C#と違ってVBだとデリゲートを直接呼び出すことができないことも
分かんないのかね君は
975958:2008/02/21(木) 20:15:31
皆さん、有り難うございました。
すっきりしました。
976デフォルトの名無しさん:2008/02/21(木) 21:10:48
>>974
統合失調症の人?
俺はエスパーじゃないから君がC#な人かどうかなんて知らない。
っていうか、ここどこ?w

ついでに言えば、
>C#と違ってVBだとデリゲートを直接呼び出すことができないことも
何これ意味がわからん。
977デフォルトの名無しさん:2008/02/21(木) 21:19:46
>>968-969みれば彼がC#な人間だということはわかるだろ。
でもなんでVB.NETのスレにいるのかはわからないけど。
978デフォルトの名無しさん:2008/02/21(木) 21:36:50
なんでC#そんなに好きなのにVBやってんの?
C#の方がいいんなら、そっちでやりゃいいじゃん?
979デフォルトの名無しさん:2008/02/21(木) 21:49:37
C#使ってる人は質問に回答してはイカンとですか。
980デフォルトの名無しさん:2008/02/21(木) 22:02:42
はっきりしてることはウザイから他所でやれと言うことだ
981デフォルトの名無しさん:2008/02/21(木) 22:09:42
少なくともC#では〜なんて回答は何の役にも立たんわけで
982デフォルトの名無しさん:2008/02/21(木) 22:16:26
まあちゃんと理解できてたらVB.NETもC#も一緒
983デフォルトの名無しさん:2008/02/21(木) 23:07:18
んだんだ
984デフォルトの名無しさん:2008/02/22(金) 02:42:17
MSDNを見るとカーソルキーでKeyDownを発生させるためにはIsInputKeyメソッドをオーバーライドする必要があり、
既定の動作は使えなくなります見たいなことが書いてあるけど
DataGridViewで試したらIsInputKeyをオーバーライドしなくてもKeyDownイベントが発生したし
既定の動作(フォーカスの移動)もしっかり生きてるんだけど、これ仕様なのかな?

XP VB2008
985968:2008/02/22(金) 02:51:25
>>976
自作クラスに自作イベントを宣言し、そのインスタンスをForm1で宣言しました。
Form1のButton1がクリックされたときに先のインスタンスの自作イベントが発生するようにしたい。
VBでどうやって書く?RaiseEventを使おうとしてもForm1のイベントじゃないから無理みたいだよ。
ちなみにC#だったらイベントデリゲートを直接呼び出すことが可能だから簡単。
VBでも当然できるんだよね?

Public Class Form1
WithEvents tmp As New EventTest()
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'ここにコードを書いてください
End Sub
End Class
'ユーザー定義型
Public Class EventTest
'自作イベント
Public Event PropertyChanged(ByVal sender As Object, ByVal e As EventArgs)
'プロパティ
Private newPropertyValue As String
Public Property NewProperty() As String
Get
Return newPropertyValue
End Get
Set(ByVal value As String)
newPropertyValue = value
'PropertyChangedイベントを発生させる
RaiseEvent PropertyChanged(Me, Nothing)
End Set
End Property
End Class
986984:2008/02/22(金) 02:53:44
ごめん、寝ぼけていっしょにAlt押してたの忘れてた
987984:2008/02/22(金) 05:16:18
やっぱIsInputKeyをオーバーライドしなくてもカーソルキーだけでKeyDown発生した
なんでだー
988デフォルトの名無しさん:2008/02/22(金) 05:16:44
>>985
VBもC#も全然わかってない感じだ
989デフォルトの名無しさん:2008/02/22(金) 06:57:05
C#でもクラスの外部から直接イベントを起動するのは無理なんじゃないか?
むしろ出来てしまうといろいろまずいような。
直接DelegateをPublicでさらすなら可能だがそれならVBでも出来る。
990デフォルトの名無しさん:2008/02/22(金) 06:59:20
具体的に書かないと理解できないだろうからコードを示しておく
Delegate Sub TestCallback(A As Integer, B As Integer)
Class Test
 Public TestChanged As TestCallBack
 Public Sub DoTest
  If TestChanged <> Nothing Then
    TestChanged.Invoke(1, 2)
  End If
 End Sub
End Class
Module Startup
 Sub Main
   Dim Test1 As New Test
   Test1.TestChanged = AddressOf MyCallback
   Test1.DoTest()
   Test1.TestChanged.Invoke(10,20)
 End Sub
 Sub MyCallback(A As Integer, B As Integer)
  Console.WriteLine("{0} {1}", A, B)
 End Sub
End Module
991デフォルトの名無しさん:2008/02/22(金) 08:29:09
別にそんな面倒なことしなくてもUI部品のPerformClickみたいに「イベントを生成するメソッド」
を公開するだけのことでしょ。
992デフォルトの名無しさん:2008/02/22(金) 09:08:57
>>991
それなんてトートロジー?
993デフォルトの名無しさん:2008/02/22(金) 09:43:50
>>959に誰もレスしてないのワラタwww
ここの住人もたいしたことね〜なwwwww
994デフォルトの名無しさん:2008/02/22(金) 10:07:05
ここの住民と言うより、VBプログラマがたいした事ないんだろう
995デフォルトの名無しさん:2008/02/22(金) 10:12:51
まあそうカリカリすんなって
今誰かがかいてるから
996デフォルトの名無しさん:2008/02/22(金) 11:07:24
で、次スレまだ?w
997デフォルトの名無しさん:2008/02/22(金) 11:08:16
997
998デフォルトの名無しさん:2008/02/22(金) 11:10:53
10000000げっとぉ
999デフォルトの名無しさん:2008/02/22(金) 11:11:33
>>992
トートロジーって言葉、遣ってみたかったの?
1000デフォルトの名無しさん:2008/02/22(金) 11:11:39
1000は、こいつです。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。