ぴょん備忘録

ソフトエンジニアのしょぼい備忘録です。
転載はしないでください。

【PR】


テーマ:
やりたかったこと:
BtnSaveAsFileボタンでファイルに名前を付けて保存する。
ファイルを保存ダイアログで選択されたフォルダ(カレントディレクトリ)を覚えて、
再度、ファイルを保存ダイアログが表示されたときにそのフォルダ内部を
みせたい。

ソースの一部:
Public g_strDir As String ’これはグローバル変数

'初期でマイドキュメントに設定
g_strDir = _
System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)

'カレントがいなくなった時の処理もしている
If System.IO.Directory.Exists(g_strDir) = False Then
g_strDir = System.Environment.GetFolderPath(Environment.SpecialFolder.Personal)
End If

’ボタンクリックイベントでダイアログを出す
BtnSaveAsFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
 Handles BtnSaveAsFile.Click
Dim sfd As New SaveFileDialog()
sfd.InitialDirectory = g_strDir
If sfd.ShowDialog() = DialogResult.OK Then
g_strDir = CurDir() ’ここでカレントを確保※
’ここらへんでファイル保存処理をやっている
End If
End Sub

WinXPだと※のときのg_strDirは保存先ディレクトリを確保できている
でも、Win7だと実行exeのあるディレクトリを確保してしまう。。。

したかがないので、保存するファイル名を含むパスを取ってきて
ディレクトリ名だけを抽出して確保することにした。
※を↓こんなふうに変更したらうまくいったよ^^*
g_strDir = System.IO.Path.GetDirectoryName(sfd.FileName)

あーよかった。。。
同じテーマの記事
PR

テーマ:
今回の課題:VB.NET2010
ユーザがPCをシャットダウンしても、アプリがシャットダウンを検出して動きを決めたい。
アプリはWinフォームアプリ。
アプリにはClosingイベントでの処理があるとする。(だからClosingイベントは捨てられない)

シャットダウンを検出するにはSessionEndingを使えるとのこと。
DOBONさんのサイト
http://dobon.net/vb/dotnet/system/sessionending.html
SessionEnding内でシャットダウンのイベントをキャンセルすればいいのか。。。

お。でも実際載せて動かしたら、
SessionEndingよりもClosingが先にあがっちゃって
だめじゃーん。
Closiongイベントがなければ、DOBONさんので行けたのに。。。残念。

ちょいぐぐってみる。。。

MSDNサイトにサンプルがあってよかた^^*
http://msdn.microsoft.com/ja-jp/library/microsoft.win32.systemevents.sessionending(VS.71).aspx

とりあえず、サイトが動くといけないので
ソースはっておこ。

WndProcがClosingよりも先にあがった。
SessionEndingで記述したかったことをここにかけば、いけそう。
ラッキー。。。
プラットホームにWindouws7の表記はないから、Win7で動くか知らんよ。

-----
Private Shared WM_QUERYENDSESSION As Integer = &H11
Private Shared systemShutdown As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
    If m.Msg = WM_QUERYENDSESSION Then
        MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot")
        systemShutdown = True
    End If
    ' If this is WM_QUERYENDSESSION, the closing event should be fired in the base WndProc
    MyBase.WndProc(m)
End Sub 'WndProc
Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
    If (systemShutdown) Then
    ' reset the variable since they may cancel the shutdown
        systemShutdown = False
        If (DialogResult.Yes = _
                MessageBox.Show("My application", "Would you care to save your work before logging off?", MessageBoxButtons.YesNo)) Then
                e.Cancel = True
        Else
                e.Cancel = False
        End If
    End If
End Sub
----

テーマ:
以前から寝ているときの歯ぎしりで悩まされている顎関節症。。。

マウスピースを作ってもらって寝るとき装着してる。。。

これをやらないと、自分の歯で自分の歯を割っちゃったりするのです。。。

この数週間、朝起きたら、顎が1センチくらいしか開かなくなって
無理して開けると「パキッ」って音がする。。。相当大きな音らしく人に聞こえるみたい。。。

前は、たまに、だったんだけど、今は毎日。。。

これはやばい。。。

マウスピースの調整が必要かもって思い、歯科へ。。。

調整してもらったけど、今後自宅でマッサージと温めが必要みたい。。。

1)バスタブに耳の下まで沈んで温める
2)耳の付け根や顎の付け根を指で押したら ”イタ気持ちいい”場所をゆっくりツボ押し。。。
3)押しても激いたくなかったら、ちょっとぐるぐるってマッサージ

さて、少し改善してくれるといいんだけど。。。

PCに向かう姿勢、悪くないですか?って聞かれました。。。

モニタ画面を覗き込むように顎を出す姿勢、だめだそうです。。。

皆様もお気をつけて。。。



テーマ:

BtnAをマウスオーバーした時にToolTip1を表示したい場合、
下記コードを書いた。

Me.ToolTip1.SetToolTip(BtnA,"これはAボタンだよ")

マウスがボタンAに乗ると一回はToolTipが表示されるのに、
2回目以降、あらわれない。。。

ぐぐってみたらMSDNのページにあたって、下記のようなことを
すればいいことがわかった。

マウスが離れた時のイベント内で、ToolTipのActiveを一度FlaseにしてからTrueにすると
マウスオーバーした時に必ずToolTIpが表示されるようになるらしい。。。

Private Sub BtnXdt_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs)  _
Handles BtnXdt.MouseLeave
        Me.ToolTip1.Active = False
        Me.ToolTip1.Active = True
End Sub

お、なるほど。。。できた^^*

テーマ:
COMポートの検索っていろいろやり方があるみたい。
一番すんなりいった方法はこれ↓

'[%(COM%)]を探してねっというクエリを宣言する
Dim query1 As ManagementObjectSearcher = _
New ManagementObjectSearcher("Select * from Win32_PNPEntity" & _
" Where (Name like '%(COM%)')")

'探した結果を取得して保持する
Dim queryCollection1 As ManagementObjectCollection = query1.Get()
'取得数
Debug.WriteLine(queryCollection1.Count.ToString & "個見つかった")

'ManagementObject形変数宣言
Dim mo As ManagementObject
For Each mo In queryCollection1
        Dim port_info As String = mo("Name").ToString
        Debug.WriteLine(port_info) 'ポート名
 Next


テーマ:
ソリューションのプロパティを表示
コンパイルタブの「詳細コンパイルオプション」ボタンでコンパイラの詳細設定画面を開く
カスタム定数に定義する(複数定義する場合はカンマで区切る)


コンパイルswに依存して、アセンブリ情報を変えたい場合は
AssemblyInfo.vb
内でSW定義毎に情報を変えればOK

例えば

#If FLAG = "HOGE" Then
<Assembly: AssemblyTitle("Mojimoji Application")>
#Else
<Assembly: AssemblyTitle("Daedame Application")>
#EndIf

動きやexeのアセンブリ情報を変えるのはできたけど、
コンパイルswで出来上がるexe名を変える方法、ないかなあ・・・。

アプリケーションタブのアセンブリ名を変えればexe名を変えられるけどね。。。

テーマ:
Dim exApp As New Object

'起動
exApp = New Excel.Application()
 '新ブック追加
Dim book As Excel.Workbook = exApp.Workbooks.Add()
 'シート1を取得
Dim sheet As Excel.Worksheet = book.Worksheets(1)

'ブックClose
book.Close(False)
System.Runtime.InteropServices.Marshal.ReleaseComObject(book)
book = Nothing
'終了
exApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(exApp)
exApp = Nothing

気になるキーワード