┏第47号━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ .NETプログラミング研究 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
──<メニュー>───────────────────────
■.NET質問箱
・通常使うプリンタの取得と設定
・プリンタのポート、状態の取得
・エクスプローラへファイルをドラッグ&ドロップする
・ツールバーに画像が表示されない
───────────────────────────────
───────────────────────────────
■.NET質問箱
───────────────────────────────
「.NET質問箱」では、「どぼん!のプログラミング掲示板」に書き込
まれた.NETプログラミングに関する投稿を基に、さらに考察を加え、
Q&A形式にまとめて紹介します。
[URL]どぼん!のプログラミング掲示板
http://dobon.net/vb/bbs.html
───────────────────────────────
●通常使うプリンタの取得と設定
【質問】
「通常使うプリンタ」に指定されているプリンタ名はどのように取得
できますか?また、「通常使うプリンタ」を設定するにはどのように
すればいいですか?
【回答】
「通常使うプリンタ」に指定されているプリンタ名は、新しく
PrintDocumentオブジェクトを作成し、そのPrinterSettings.
PrinterNameプロパティを調べれば分かります。次のような感じです。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'PrintDocumentの作成
Dim pd As New System.Drawing.Printing.PrintDocument
'プリンタ名の取得
Dim defaultPrinterName As String = pd.PrinterSettings.PrinterName
'結果を表示
Console.WriteLine("通常使用するプリンタは " +
defaultPrinterName + " です。")
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
//PrintDocumentの作成
System.Drawing.Printing.PrintDocument pd =
new System.Drawing.Printing.PrintDocument();
//プリンタ名の取得
string defaultPrinterName = pd.PrinterSettings.PrinterName;
//結果を表示
Console.WriteLine(
"通常使用するプリンタは " + defaultPrinterName + " です。");
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
また、WMIを使用してプリンタを列挙し、デフォルトのプリンタを調
べることもできます。これは次のようなコードになります。(参照に
"System.Management"が追加する必要があります。)
[URL]Win32_Printer
http://msdn.microsoft.com/library/en-us/wmisdk/wmi/win32_printer.asp
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
Dim mos As New System.Management.ManagementObjectSearcher( _
"Select * from Win32_Printer")
Dim moc As System.Management.ManagementObjectCollection = _
mos.Get()
'プリンタを列挙する
Dim mo As System.Management.ManagementObject
For Each mo In moc
'デフォルトのプリンタか調べる
'mo("Default")はWindows NT 4.0, 2000で使用できません
Dim attr As Long = Convert.ToInt64(mo("Attributes"))
If (attr And 4) = 4 Then
Console.WriteLine(("通常使用するプリンタは " + _
mo("Name").ToString() + " です。"))
Exit For
End If
Next mo
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
System.Management.ManagementObjectSearcher mos =
new System.Management.ManagementObjectSearcher(
"Select * from Win32_Printer");
System.Management.ManagementObjectCollection moc =
mos.Get();
//プリンタを列挙する
foreach(System.Management.ManagementObject mo in moc)
{
//デフォルトのプリンタか調べる
//mo["Default"]はWindows NT 4.0, 2000で使用できません
if ((((uint) mo["Attributes"]) & 4) == 4)
{
Console.WriteLine(
"通常使用するプリンタは " + mo["Name"] + " です。");
break;
}
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
次に「通常使うプリンタ」を設定する方法を紹介します。
まず、WMIを使用した方法を紹介します。ただしこの方法はWindows
XP以上でしか使用できません。先ほどの例と同様、参照に"System.
Management"を追加する必要があります。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'/
'/ 「通常使用するプリンタ」に設定する
'/
'/ プリンタ名
Public Sub SetDefaultPrinter(ByVal printerName As String)
Dim mos As New System.Management.ManagementObjectSearcher( _
"Select * from Win32_Printer")
Dim moc As System.Management.ManagementObjectCollection = _
mos.Get()
'プリンタを列挙する
Dim mo As System.Management.ManagementObject
For Each mo In moc
If CStr(mo("Name")) = printerName Then
'名前を見つけたとき、デフォルトプリンタに設定する
Dim mbo As System.Management.ManagementBaseObject = _
mo.InvokeMethod("SetDefaultPrinter", Nothing, Nothing)
Dim ret As Long = Convert.ToInt64(mbo("returnValue"))
If ret <> 0 Then
Throw New Exception("失敗しました。")
End If
End If
Next mo
End Sub
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
///
/// 「通常使用するプリンタ」に設定する
///
/// プリンタ名
public void SetDefaultPrinter(string printerName)
{
System.Management.ManagementObjectSearcher mos =
new System.Management.ManagementObjectSearcher(
"Select * from Win32_Printer");
System.Management.ManagementObjectCollection moc =
mos.Get();
//プリンタを列挙する
foreach(System.Management.ManagementObject mo in moc)
{
if (((string) mo["Name"]) == printerName)
{
//名前を見つけたとき、デフォルトプリンタに設定する
System.Management.ManagementBaseObject mbo =
mo.InvokeMethod("SetDefaultPrinter", null, null);
if (((uint) mbo["returnValue"]) != 0)
throw new Exception("失敗しました。");
}
}
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
また、Windows Scripting HostのWshNetworkオブジェクトの
SetDefaultPrinterメソッドを使う方法もあります。WshNetworkオブ
ジェクトのSetDefaultPrinterメソッドを呼び出すには、次のように
します。
[URL]SetDefaultPrinter メソッド
http://www.microsoft.com/japan/msdn/library/ja/script56/html/wsmthsetdefaultprinter.asp
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'/
'/ 「通常使用するプリンタ」に設定する
'/
'/ プリンタ名
Public Sub SetDefaultPrinter(ByVal printerName As String)
'WshNetworkオブジェクトを作成する
Dim t As Type = Type.GetTypeFromProgID("WScript.Network")
Dim wshNetwork As Object = Activator.CreateInstance(t)
'SetDefaultPrinterメソッドを呼び出す
t.InvokeMember("SetDefaultPrinter", _
System.Reflection.BindingFlags.InvokeMethod, _
Nothing, wshNetwork, New Object() {printerName})
End Sub
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
///
/// 「通常使用するプリンタ」に設定する
///
/// プリンタ名
public void SetDefaultPrinter(string printerName)
{
//WshNetworkオブジェクトを作成する
Type t = Type.GetTypeFromProgID("WScript.Network");
object wshNetwork = Activator.CreateInstance(t);
//SetDefaultPrinterメソッドを呼び出す
t.InvokeMember("SetDefaultPrinter",
System.Reflection.BindingFlags.InvokeMethod,
null, wshNetwork, new object[] {printerName});
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
上記で紹介した方法以外に通常使うプリンタを取得するために
GetDefaultPrinter、GetProfileString、GetPrinter関数を、通常使
うプリンタを設定するためにSetDefaultPrinter、
WriteProfileString、SetPrinter関数をP/Invokeにより呼び出すとい
う方法もあります。これらの関数に関しては、次のリンク先をご覧く
ださい。
[URL][HOWTO] Windows の通常使うプリンタを取得および設定する方
法
http://support.microsoft.com/kb/246772/ja
GetPrinter関数に関しては、次の紹介する「プリンタのポートと状態
の取得」でその使用法を紹介しています(ただしこの方法で通常使う
プリンタが取得できるのは、Windows95、98、Meのみです)。
○この記事の基になった掲示板のスレッド
[題名] 通常使うプリンタについて質問
[投稿者(敬称略)] PASA, 管理人
[URL] http://dobon.net/vb/bbs/log3-4/1950.html
[題名] 通常使うプリンタの取得
[投稿者(敬称略)] tab, 管理人
[URL] http://dobon.net/vb/bbs/log3-4/1992.html
───────────────────────────────
●プリンタのポート、状態の取得
【質問】
プリンタのポートや現在の状態に関する情報を取得したいのですが、
どうすればいいの?
【回答】
「通常使うプリンタの取得と設定」と同じように、WMIの
Win32_Printerを使ってこれらの情報を取得できます。ポートは
PortNameプロパティ、状態はPrinterStatusプロパティで取得できま
す。
また、P/InvokeでGetPrinter関数を呼び出すことにより、プリンタの
情報を取得することもできます。ここではこの方法を紹介します。
下にプリンタの情報をPRINTER_INFO_2構造体で取得するためのメソッ
ド(GetPrinterInfoメソッド)のサンプルを示します。
[URL]PRINTER_INFO_2
http://msdn.microsoft.com/library/en-us/gdi/prntspol_9otu.asp
なおこのコードを書くために次の記事を参考にしました。
[URL]Newsgroups:microsoft.public.dotnet.framework.interop
Subject:Solution: Printer Port and Driver Information
(PRINTER_INFO_2)
http://groups.google.co.jp/groups?hl=ja&lr=&inlang=ja&selm=8FE95F7B-C55D-4AB2-8E6D-3A3FE1E1812C%40microsoft.com
[URL]The Code Project - Changing printer settings using C#
http://www.codeproject.com/dotnet/NET_Printer_Library.asp
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
_
Private Shared Function OpenPrinter( _
ByVal pPrinterName As String, ByRef hPrinter As IntPtr, _
ByVal pDefault As IntPtr) As Boolean
End Function
_
Private Shared Function ClosePrinter( _
ByVal hPrinter As IntPtr) As Boolean
End Function
_
Private Shared Function GetPrinter( _
ByVal hPrinter As IntPtr, ByVal dwLevel As Integer, _
ByVal pPrinter As IntPtr, ByVal cbBuf As Integer, _
ByRef pcbNeeded As Integer) As Boolean
End Function
_
Public Structure PRINTER_INFO_2
Public pServerName As String
Public pPrinterName As String
Public pShareName As String
Public pPortName As String
Public pDriverName As String
Public pComment As String
Public pLocation As String
Public pDevMode As IntPtr
Public pSepFile As String
Public pPrintProcessor As String
Public pDatatype As String
Public pParameters As String
Public pSecurityDescriptor As IntPtr
Public Attributes As System.UInt32
Public Priority As System.UInt32
Public DefaultPriority As System.UInt32
Public StartTime As System.UInt32
Public UntilTime As System.UInt32
Public Status As System.UInt32
Public cJobs As System.UInt32
Public AveragePPM As System.UInt32
End Structure
'/
'/ プリンタの情報をPRINTER_INFO_2で取得する
'/
'/ プリンタ名
'/ プリンタの情報
Public Shared Function GetPrinterInfo( _
ByVal printerName As String) As PRINTER_INFO_2
'プリンタのハンドルを取得する
Dim hPrinter As IntPtr
If Not OpenPrinter(printerName, hPrinter, IntPtr.Zero) Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
End If
Dim pPrinterInfo As IntPtr = IntPtr.Zero
Try
'必要なバイト数を取得する
Dim needed As Integer
GetPrinter(hPrinter, 2, IntPtr.Zero, 0, needed)
If needed <= 0 Then
Throw New Exception("失敗しました。")
End If
'メモリを割り当てる
pPrinterInfo = Marshal.AllocHGlobal(needed)
'プリンタ情報を取得する
Dim temp As Integer
If Not GetPrinter(hPrinter, 2, pPrinterInfo, needed, temp) Then
Throw New Win32Exception(Marshal.GetLastWin32Error())
End If
'PRINTER_INFO_2型にマーシャリングする
Dim printerInfo As PRINTER_INFO_2 = _
CType(Marshal.PtrToStructure( _
pPrinterInfo, GetType(PRINTER_INFO_2)), PRINTER_INFO_2)
'結果を返す
Return printerInfo
Finally
'後始末をする
ClosePrinter(hPrinter)
Marshal.FreeHGlobal(pPrinterInfo)
End Try
End Function
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
[DllImport("winspool.drv", EntryPoint="OpenPrinterW",
CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
private static extern bool OpenPrinter(string pPrinterName,
out IntPtr hPrinter, IntPtr pDefault);
[DllImport("winspool.drv", CharSet=CharSet.Auto, SetLastError=true,
ExactSpelling=true, CallingConvention=CallingConvention.StdCall)]
private static extern bool ClosePrinter(IntPtr hPrinter);
[DllImport("winspool.drv", EntryPoint="GetPrinterW",
CharSet=CharSet.Auto, SetLastError=true, ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
private static extern bool GetPrinter(IntPtr hPrinter, int dwLevel,
IntPtr pPrinter, int cbBuf, out int pcbNeeded);
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct PRINTER_INFO_2
{
public string pServerName;
public string pPrinterName;
public string pShareName;
public string pPortName;
public string pDriverName;
public string pComment;
public string pLocation;
public IntPtr pDevMode;
public string pSepFile;
public string pPrintProcessor;
public string pDatatype;
public string pParameters;
public IntPtr pSecurityDescriptor;
public uint Attributes;
public uint Priority;
public uint DefaultPriority;
public uint StartTime;
public uint UntilTime;
public uint Status;
public uint cJobs;
public uint AveragePPM;
}
///
/// プリンタの情報をPRINTER_INFO_2で取得する
///
/// プリンタ名
/// プリンタの情報
public static PRINTER_INFO_2 GetPrinterInfo(string printerName)
{
//プリンタのハンドルを取得する
IntPtr hPrinter;
if (!OpenPrinter(printerName, out hPrinter, IntPtr.Zero))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
IntPtr pPrinterInfo = IntPtr.Zero;
try
{
//必要なバイト数を取得する
int needed;
GetPrinter(hPrinter, 2, IntPtr.Zero, 0, out needed);
if (needed <= 0)
throw new Exception("失敗しました。");
//メモリを割り当てる
pPrinterInfo = Marshal.AllocHGlobal(needed);
//プリンタ情報を取得する
int temp;
if (!GetPrinter(hPrinter, 2, pPrinterInfo, needed, out temp))
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
//PRINTER_INFO_2型にマーシャリングする
PRINTER_INFO_2 printerInfo =
(PRINTER_INFO_2) Marshal.PtrToStructure(pPrinterInfo,
typeof(PRINTER_INFO_2));
//結果を返す
return printerInfo;
}
finally
{
//後始末をする
ClosePrinter(hPrinter);
Marshal.FreeHGlobal(pPrinterInfo);
}
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
GetPrinterInfoメソッドを使ってプリンタのポートと状態を取得する
例を以下に示します。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'プリンタ名
Dim printerName As String = "PRINTER NAME"
'プリンタ情報を取得する
Dim pinfo As PRINTER_INFO_2 = GetPrinterInfo(printerName)
'ポートを表示する
Console.WriteLine(("Port:" + pinfo.pPortName))
'状態を表示する
Console.WriteLine(("Status:" + pinfo.Status.ToString()))
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
//プリンタ名
string printerName = "PRINTER NAME";
//プリンタ情報を取得する
PRINTER_INFO_2 pinfo = GetPrinterInfo(printerName);
//ポートを表示する
Console.WriteLine("Port:" + pinfo.pPortName);
//状態を表示する
Console.WriteLine("Status:" + pinfo.Status.ToString());
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
○この記事の基になった掲示板のスレッド
[題名] プリンターポートの取得方法について
[投稿者(敬称略)] パオ, 管理人
[URL] http://dobon.net/vb/bbs/log3-4/2062.html
───────────────────────────────
●エクスプローラへファイルをドラッグ&ドロップする
【質問】
ListBoxコントロールのリストにファイル名を追加し、リストからエ
クスプローラにドラッグ&ドロップすることによりファイルをコピー
できるようにしたいのですが、どうすればできますか?
【回答】
エクスプローラへのドラッグ&ドロップも通常のドラッグ&ドロップ同
様、Control.DoDragDropメソッドで可能です。(通常のドラッグ&ド
ロップの方法に関しては、下記リンク先をご覧ください。)
[URL]DOBON.NET .NET Tips - ドラッグ&ドロップを行う
http://dobon.net/vb/dotnet/control/draganddrop.html
ただしDoDragDropメソッドを呼び出す時、データ形式にDataFormats.
FileDropを、データにドロップ&ドラッグしたいファイルのフルパス
のString型配列(ただのString型ではないことに注意してください)
を指定して作成したDataObjectオブジェクトを使用します。
以下にリストボックスからエクスプローラへのファイルのドラッグ&
ドロップを可能にするサンプルを示します。このサンプルでは、フォー
ム(Form1)にリストボックス(ListBox1)が配置されている必要があり
ます。フォームのLoadイベントハンドラでリストボックスにファイル
名を表示し、リストボックスのMouseDownイベントハンドラでドラッ
グを開始するようにしています。ここでは一つのファイルしかドラッ
グ&ドロップできませんが、String型配列に複数のファイルのパスを
指定すれば、複数のファイルのドラッグ&ドロップが可能です。
‥‥▽VB.NET ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
'フォームのLoadイベントハンドラ
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As EventArgs) Handles MyBase.Load
'MouseDownイベントハンドラを追加
AddHandler ListBox1.MouseDown, AddressOf ListBox1_MouseDown
'ListBox1に"C:\"にあるファイルを表示する
ListBox1.Items.AddRange( _
System.IO.Directory.GetFiles("C:\", "*.*"))
End Sub
'ListBox1のMouseDownイベントハンドラ
Private Sub ListBox1_MouseDown(ByVal sender As Object, _
ByVal e As MouseEventArgs)
Dim lbx As ListBox = CType(sender, ListBox)
'ドラッグするファイル名を取得する
Dim itemIndex As Integer = lbx.IndexFromPoint(e.X, e.Y)
If itemIndex < 0 Then
Return
End If
Dim files As String() = {CStr(lbx.Items(itemIndex))}
'DataObjectを作成する
Dim dataObj As New DataObject(DataFormats.FileDrop, files)
'ドラッグを開始する
Dim dde As DragDropEffects = _
lbx.DoDragDrop(dataObj, DragDropEffects.Copy)
End Sub
‥‥△VB.NET ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
‥‥▽C# ここから▽‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, System.EventArgs e)
{
//MouseDownイベントハンドラを追加
ListBox1.MouseDown += new MouseEventHandler(ListBox1_MouseDown);
//ListBox1に"C:\"にあるファイルを表示する
ListBox1.Items.AddRange(
System.IO.Directory.GetFiles("C:\\", "*.*"));
}
//ListBox1のMouseDownイベントハンドラ
private void ListBox1_MouseDown(object sender, MouseEventArgs e)
{
ListBox lbx = (ListBox) sender;
//ドラッグするファイル名を取得する
int itemIndex = lbx.IndexFromPoint(e.X, e.Y);
if (itemIndex < 0) return;
string[] files = {(string) lbx.Items[itemIndex]};
//DataObjectを作成する
DataObject dataObj = new DataObject(DataFormats.FileDrop, files);
//ドラッグを開始する
DragDropEffects dde =
lbx.DoDragDrop(dataObj, DragDropEffects.Copy);
}
‥‥△C# ここまで△‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥
なお、ファイルを移動するためにDoDragDropメソッドで
DragDropEffects.Moveを使用した場合、DoDragDropメソッドが返す
DragDropEffectsの値はNoneになるようです。ファイルを移動したか
を調べるには、DoDragDropメソッドが終了してからFile.Existsメソ
ッドを使ってドラッグしたファイルが削除されたか調べるなどの方法
が考えられます。(詳しくは、下の「エクスプローラへのドラッグ&
ドロップで移動された場合の判定について」のリンク先をご覧くださ
い。)
○この記事の基になった掲示板のスレッド
[題名] VB.Netで作成したアプリからエクスプローラへのドラッグ&
ドロップの方法
[投稿者(敬称略)] L, 管理人
[URL] http://dobon.net/vb/bbs/log3-4/2064.html
[題名] listBoxでエクスプローラーのドラッグ&ドロップの実現方法
[投稿者(敬称略)] brn, りょう, Sugi@ぱぱんぶぃびぃ, 管理人
[URL] http://dobon.net/vb/bbs/log3-6/3108.html
[題名] エクスプローラへのドラッグ&ドロップで移動された場合の
判定について
[投稿者(敬称略)] Mike3, 深山
[URL] http://dobon.net/vb/bbs/log3-5/2450.html
───────────────────────────────
●ツールバーに画像が表示されない
【質問】
Visual Studio .NETのフォームデザイナでImageListを使ってツール
バーのボタンに画像を表示しているのですが、画像が表示されません。
一体どうなっているのでしょうか?
【回答】
Application.EnableVisualStylesメソッドを使用している時は、これ
が原因でしょう。この場合は、EnableVisualStylesメソッドのすぐ後
でApplication.DoEventsメソッドを呼び出すか、EnableVisualStyles
メソッドを使わずにマニフェストファイルを使用することにより解決
できます。これらの方法に関しては、次のリンク先をご覧ください。
[URL]DOBON.NET .NET Tips - コントロールの外観をXPスタイルにす
る
http://dobon.net/vb/dotnet/control/xpstyle.html
さらに、EnableVisualStylesメソッドを使用していなくてもツールバー
に画像が表示されないというバグもあるようで、これに関しては次の
ページで紹介されています。
[URL]Newsgroups:microsoft.public.dotnet.languages.csharp
Subject:RE: C# toolbar image visible at design time, but
vanishes at runtime.
http://groups.google.co.jp/groups?hl=ja&lr=&selm=kV%24mXFjOCHA.1716%40cpmsftngxa07
この記事によるとこの問題の解決法は、コードエディタで該当するフ
ォームクラスのInitializeComponentメソッド内にあるToolBar.
Buttons.Addrangeメソッドを呼び出している箇所を、ツールバーのボ
タンの設定の後ろに移動させるということのようです。しかしデザイ
ナで変更を加えるたびにコードが書き換わってしまうため、そのたび
にAddrangeを移動させなければならないということです。
ツールバーに画像が表示されなくて困っている方は一度おためしを。
○この記事の基になった掲示板のスレッド
[題名] ツールバーのアイコンが表示されない
[投稿者(敬称略)] MoMoMo, Sugi@ぱぱんぶぃびぃ, 管理人
[URL] http://dobon.net/vb/bbs/log3-4/2064.html
===============================
■ここで示したコードの多くはまずC#で書き、それを「C# to VB.NET
Translator」でVB.NETのコードに変換し、修正を加えたものです。
[URL]C# to VB.NET Translator
http://authors.aspalliance.com/aldotnet/examples/translate.aspx
■このマガジンの購読、購読中止、バックナンバー、説明に関しては
次のページをご覧ください。
http://www.mag2.com/m/0000104516.htm
■発行人・編集人:どぼん!
(Microsoft MVP for Visual Basic, Oct 2004-Oct 2005)
http://dobon.net
dobon_info@yahoo.co.jp
■ご質問等はメールではなく、掲示板へお願いいたします。
http://dobon.net/vb/bbs.html
■上記メールアドレスへのメールは確実に読まれる保障はありません
(スパム、ウィルス対策です)。メールは下記URLのフォームメール
から送信してください。
http://dobon.net/mail.html
Copyright (c) 2003 - 2004 DOBON! All rights reserved.
===============================