• 締切済み

Windows クラシック表示の時に VisualStyleRendererでエラーが発生しないようにしたい。

OS:Windows XP 開発環境Visual Basic 2008 お世話になります。 表題の件、下記に示しますコードが、「Windowsクラシック」表示の時において正しく処理されず、エラーが返されてしまいます。 ************************************************************** Imports System.Windows.Forms.VisualStyles Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim rOpen As VisualStyleRenderer = New VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Opened) End Sub End Class ************************************************************** 画面のプロパティにおいて「Windowsクラシック」の状態でプログラムを実行すると、 VisualStyleRenderer を new する部分で 「InvalidOperationException:現在アクティブにされているVisualスタイルがないため、Visualスタイルに関連する操作でエラーが発生しました。」 というエラーが発生します。 テーマが「Windows XP」の時には同様のエラーメッセージは表示されません。 何がしたいのかというと、 http://blogs.msdn.com/markrideout/archive/2006/01/08/510700.aspx に載っている、DataGridViewをツリー表示にするコンポーネントを利用したいのです。 先ほどのエラーが発生するコードはツリー ビュー ノードのプラス記号 (+) ボタンを表す visual スタイル要素を取得する部分で使用されています。 「Windows XP」のモードにおいては問題なく使えることがわかりましたが、 「Windowsクラシック」のモード及び OSがWindows2000の環境の場合、プログラム起動時に異常終了してしまいます。 上記の問題を解決する方法を調査しても見つけられず、困っています。 自分でできる今のところの回避手段としては、クラシック表示の場合は+-の記号は表示させないという対応をとるくらいしかできません。 この現象はバグなのでしょうか?バグなら修正してもらえるとありがたいのですが。。 (Windows Vistaだったら問題ないとか??) 仕様の場合、シンプルな回避方法はありませんでしょうか? (+のアイコンを他の手段で描画すればよいのでしょうが、これだけの為に不要な手間はかけたくないです。。) ご存知の方はどうか教えてください。 もしくは、Tree表示のできるデータグリッドのサンプルなどでもっとよいものをご存じの方はいらっしゃいませんでしょうか。 よろしくお願いします。

  • apn
  • お礼率0% (0/1)

みんなの回答

  • isle
  • ベストアンサー率51% (77/150)
回答No.1

例外(Exception)はキャッチできます。 Try  Dim rOpen As VisualStyleRenderer = New VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Opened) Catch ex As InvalidOperationException  ' InvalidOperationExceptionが発生したときここに来る  Console.WriteLine("Exception message: {0}", ex.Message) End Try

関連するQ&A

  • ウィンドウがクラシック表示になって・・・

    ウィンドウがクラシック表示になってしまい プロパティーでデザインのところをXP表示に変えるとエラーが発生し 何度やってもダメでした どなたか直しかたをおしえてください よろしくお願いします できれば初心者なので分かりやすく教えていただけるとありがたいです

  • gzmrotate.dllを読み込み中にエラーが発生

    XPがたちあがったあとエラーが出ます。 「c:\WINDOWS\system32\gzmrotate.dllを読み込み中にエラーが発生しました。指定されたモジュールが見つかりません。」と表示されます。どう、対応すべきか教えて下さい。

  • Windows クラシックスタイルが変わる。

    画面のプロパティ→デザインのところに、「Windows XP スタイル」と「Windows クラシックスタイル」というのがありますが、ある日突然、「Windows XP スタイル」になりました。 具体的には、私は普段「Windows クラシックスタイル」にしているのですが、ある日を境に、PCを再起動するたびに「Windows XP スタイル」に戻るようになりました。設定を変更しても、再起動すると必ず「Windows XP スタイル」になります。 OSはXP Homeです。ウイルスバスター2008でウイルスチェックをしましたが何も出ませんでした。 心当たりがあればいいのですが、不具合の起きる前に3回PCを起動してますが、その間に新しいソフトのインストールをしてもいませんし、設定変更もしていません。3回の間にしたのは、インターネット(Impress Watchとこの質問サイトとその他少し、アダルト系は見てません)です。 4回前には、ウイルスバスター2008を再インストールしました。 長くなりましたが、私が知りたいのは 1.再起動してもWindows クラシックスタイルを維持するにはどうしたら良いか。 2.原因は何か です。 よろしくお願いします。

  • エラーでつまってます・・・お助け下さい

    VS2003.NETで開発中の初心者です。 以下のコード(Form1.vb)を実行すると次のエラーがポップアップされ“oADP.Fill(oDS, "ROOT")”のラインで止まります。 <エラー> 'System.Data.OleDb.OleDbException' のハンドルされていない例外が system.data.dll で発生しました。 どこがおかしいのかわかりません。 詳しい方がいましたら、ご教授下さいませ。 ---------------------------- Imports System.Data.OleDb Public Class Form1  Inherits System.Windows.Forms.Form  Private oConn As OleDb.OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0" & ";Data Source=..\USER.mdb") 「Windows フォーム デザイナで生成されたコード」   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load    '--DataAdapterの設定    Dim oADP As OleDb.OleDbDataAdapter    oADP = New OleDb.OleDbDataAdapter("SELECT *FORM TALK WHERE Node=0 ORDER BY No", oConn)    '--DataSetの設定    Dim oDS As New DataSet    oADP.Fill(oDS, "ROOT")        ・        ・        ・ ----------------------------

  • SerialPort処理でInvokeメソッドを使用するとエラーが発生。

    はじめまして。こんばんわ。 同一プロジェクトの複数のフォームから、RS232C接続処理を行っております。 まったく同じ処理内容なので、クラスを使用しようとしております。 しかし、データ受信時、Invokeメソッドを使用して、各フォームのイベントをCALLしますと、『InvalidOperationException』が発生し、『ウィンドウ ハンドルが作成される前、コントロールで Invoke または BeginInvoke を呼び出せません。』というエラーメッセージが表示されてしまいます。 ソースを下記に記載いたします。どなたか、原因・対処方法がわかる方がいらっしゃいましたら、御手数をおかけいたしますが、ご教示の程、よろしくお願い申し上げます。 ============================== 呼び出し元フォーム ============================== Public Class Form1   Private cls232CIns As cls232C   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     cls232CIns.openport()   End Sub   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     cls232CIns = New cls232C()   End Sub   Public Sub DispData(ByVal data As String)     TextBox1.Text = data   End Sub End Class ============================== SerialPort通信クラス ============================== Imports System.IO.Ports Public Class cls232C   WithEvents SP1 As SerialPort   Delegate Sub RecvDataDisp(ByVal dataR As String)   Public Sub New()     SP1 = New SerialPort("COM6", 9600)   End Sub   Public Sub openport()     SP1.Open()   End Sub   Public Sub closeport()     SP1.Close()   End Sub   Public Sub ReceiveData(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SP1.DataReceived     Dim getdata As String     getdata = SP1.ReadLine     Form1.Invoke(New RecvDataDisp(AddressOf Form1.DispData), getdata) ←ここでエラー発生   End Sub End Class  

  • 「Me」を「Form1」にするとエラーになる理由

    VB2008です。 Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.Text = "a" Form1.Text = "a" ’←「Form1.Text」に波線ができる。 End Sub End Class というように、 「Me」を「Form1」にすると 「既定のインスタンスからそれ自体を参照できません。'Me' を使用してください。」 となります。 VBAなら「Me」を「Form1」にしてもエラーにならないのに、 どうしてVBだとエラーになるのでしょうか?

  • Windows xp のデザインがクラシックに変わってしまった。

    Windows xp Home Editionを使っています。 Windows UpdateでSP1をインストールしてから画面のデザインが変わってしまいました。 デスクトップで「画面のプロパティ」-「デザインタブ」-「ウィンドウとボタン」の 中に、以前は「Windows xp(?)」があったのですが、SP1をインストールしてからは、 「Windowsクラシックスタイル」しかなくなってしまいました。 どのようにしたら、戻せるでしょうか。 よろしくお願いします。

  • ウィンドウの変更について、かなり困ってます;;

    画面のプロパティからウィンドウをクラシックからXPへ変更しようとしたら、視覚スタイルの読み込エラーと出てきて適用されません; 過去ログにて  <スタート⇒コントロールパネル⇒パフォーマンスとメンテナンス⇒視覚効果を調整する⇒視覚効果(デザインを優先する)⇒OK⇒再起動 直らなかった場合何かファイルが破損している可能性・ウィルスの可能性・バグの可能性があります。>  とありましたが、実行してみると“C:\WINNDOWS\system32\shell32dll.Control_RunDLL C:\WINDOWS\system.cpl.-1"の実行中に、例外が発生しました  となります。 この場合、どうすれば改善できますか? 宜しくお願いします。

  • クラシック表示から変更不可に…

    パソコンを操作していたら画面がクラシック表示になってしまい、変更が出来なくなりました。 NECのノートパソコンでWindows XP(SP2)です。しかしSP2にしたのはかなり前ですので関係があるかどうかは分かりません。 ・画面のプロパティ>デザイン>ウィンドウとボタン   通常だと「XPスタイル」と「クラシックスタイル」がある筈ですがクラシックスタイルしかありません。また、「テーマ」は「XP」になっています。 ・「Themes」の「スタートアップの種類」は「自動」になっており、「サービスの状態」は「開始」、「プロパティの回復」が「サービスを再起動する」になっています。 ・Cドライブのエラーチェック、デフラグ、WindowsUpdateを行いましたが変化なしです。 ・スパイウェア、ウイルスチェックもしましたが、異常はありません。 慣れればクラシック表示でも問題はないのですが、起動と動作が遅くなってしまったのには困っています。  音楽ソフト(HDDプレイヤーの付属ソフト)をアップデートした直後に変化したので、それが原因かとは思うのですが…。 過去ログの方法も試しましたが、回復しませんでした。最後の手段は再セットアップですが、極力避けたいのでどうか宜しくお願いします!

  • 画面表示がクラシックスタイルに(Vista)

    画面表示がクラシックスタイルに(Vista) 本日PCを起動したところ、複数あるVista搭載機の画面表示がすべてクラシックスタイルになっていました。起動時からクラシックスタイルのものもあれば、起動後に突然変更されるものもありました。 画面のプロパティを確認するとVista標準のスタイルのままでした。 その後数回の再起動を求められ、それも通常よりも多く時間がかかりました。 数回の再起動を経て、現在は通常のスタイルに戻っています。 ウィンドウズアップデートが原因だと思うのですが、同様の現象が発生した方はおられますでしょうか? 異なる原因による現象なのでしょうか? 当方では他のVISTA搭載機では発生せず、DELLのVOSTRO1000でのみ発生しました。

専門家に質問してみよう