過去に発行した「.NETプログラミング研究」のタイトルの一覧を閲覧できるようにしてほしいというご要望があったため、以下のURLから閲覧できるようにしました。バックナンバーバックナンバーのメニュー部分を切り出して列挙して表示しているだけのものですが、ご利用いただければ幸いです。「.NET質問箱」では、「どぼん!のプログラミング掲示板」に書き込まれた.NETプログラミングに関する投稿を基に、さらに考察を加え、Q&A形式にまとめて紹介します。注意この記事の最新版は「文字列の計算式の計算結果を取得する」で公開しています。"(1+6)*5/(7-4)"のような計算式を表す文字列から、その計算結果を取得するにはどのようにすればよいのでしょうか?【回答】これには、いろいろな方法が考えられます。正攻法で行けば、計算式を解析し、計算するコードを自分で書くということになります。Evaluator」です。Evaluator」は簡単な計算はもちろん、cos、sin、logなどにも対応しています。(ただし、コードはVB.NETのみです。よる文字列処理入門」も参考になります。よる文字列処理入門このように自分でコードを書く以外の方法も様々あります。JScript.NETのEvalを使う方法があります。Numeric」のスレッドでenderminhさんが紹介しています。Numericこの方法によると、まず参照に「Microsoft.Jscript」と「Microsoft.Vsa」を追加し、次のようなコードにより、計算を実行します。(JavaScript)」に紹介されています。(JavaScript)この方法によると、次のようなコードがかけます。//結果を表示Console.WriteLine(result);さらに、掲示板でピラルクさんが提案されたように、CSharpCodeProviderを使って、計算式が含まれるコードの文字列をコンパイルし、実行する方法もあります。Project」などでもいくつか紹介されています。Runtime具体的なコードは、例えば、次のようなものです。//結果を表示Console.WriteLine(d);前のJScriptCodeProviderを使った方法と比べると、この方法は計算式をコードに含めなければならず、計算式が変わるたびにコンパイルが必要になりますし、メモリのアセンブリをどのように解放するかという問題もあります(*1)。そのため、実用としては困難かもしれません。(*1)この問題に関しては、次のページに詳しいです。Controlが使用できるならば、VBScriptやJSCriptのEval関数を使う方法もあります。//結果を表示Console.WriteLine(result);これ以外にも、DataTable.Computeメソッドを使う方法など、まだまだありそうですが、きりが無いので、この辺で終わりにします。(面白い方法がありましたら、ご連絡ください。注意この記事の最新版は「TabControlのTabPageを非表示にする」で公開しています。【質問】TabControlのTabPageにはVisibleプロパティが見つかりません。TabPageを非表示にするにはどのようにすればよいのでしょうか?【回答】TabPageを非表示にするには、TabControl.TabPagesプロパティのRemoveまたはRemoveAtメソッドを使って削除するしかないようです。よって一時的にTabPageを非表示にするには、非表示にするTabPageオブジェクトを保持しておき、Removeメソッドで削除し、再び表示するときは、TabControl.TabPagesプロパティのAddメソッドで追加します。TabControlのTabPageを隠し、再び表示させるためのコードを以下に示します。次のようなTabPageManagerクラスを書きます。name="v">表示するときはTrue。非表示にするときはFalse。name="v">表示するときはTrue。非表示にするときはFalse。}}次に、このTabPageManagerクラスを使ってTabControlのTabPageを隠し、再び表示させるコードを示します。フォーム(Form1)にTabControl(TabControl1)が配置されており、TabControl1にいくつかのTabPageが追加されている時、Button1のクリックによりTabControl1の一番先頭のTabPageを隠し、さらに、Button2のクリックにより再びこのTabPageを表示させるようにしています。注意この記事の最新版は「DataGridで複数行選択できないようにし、セルがアクティブにならならず、行全体が選択されるようにする」で公開しています。【質問】Windowsアプリケーションにおいて、ListViewコントロールのMultiSelectプロパティをFalseにした時のように、DataGridコントロールで複数行選択することができなく、さらに、セルをクリックした時にセルがアクティブになることなく、そのセルの行全体が選択されるようにしたいのですが、どのようにすればよいでしょうか?【回答】まず、DataGridで一つの行だけを選択できるようにする方法を考えてみましょう。mode.」でその方法が紹介されています。mode.これらで紹介されている方法は、DataGridクラスのOnMouseMoveをオーバーライドして、マウスドラッグによる選択が無効になるようにし、さらにOnMouseDownをオーバーライドして、前に選択した行の選択を取り消すという方法です。このやり方では、キーボードによる複数行の選択を全く考慮しておらず、不完全です。(マウスの部分も不完全な点が多々ありますが。)そこで以下に示すコードでは、OnMouseMoveとOnMouseDownをオーバーライドする以外に、ProcessCmdKeyをオーバーライドして、Shiftキーと上矢印または下矢印キーが押された時、ShiftキーとCtrlキーとHomeまたはEndキーが押された時、CtrlキーとAキーが押された時のそれぞれの場合を無効にしています。}}次にセルがアクティブにならないようにする方法を考えます。FAQ」で紹介されています。GridColumnStyle?「5.41」は、GridColumnStyleを使い、GridColumnStyleのEditメソッドをオーバーライドし、編集できないようにする方法です。「5.83」は、GridColumnStyleを使わずに、DataGrid.Controlsからスクロールバー以外のコントロールを削除するという方法です。ここでは、「5.83」の方法を採用し、DataGridのOnControlAddedメソッドをオーバーライドして、スクロールバー以外のコントロールが追加された時は、これを削除するようにします。(ただしこの方法ではDataGridBoolColumnによるチェックボックスはアクティブになってしまうようです。FAQ」にあるように、DataGridのMouseUpイベントで行を選択するようにすればよいでしょう。rowクリックでも行が選択されるようにするには、CurrentCellChangedイベントなど、適当なイベントを使ってください。ここでは、OnMouseDownメソッドで行を選択するようにします。以上の考察により書かれたDataGridクラスの派生クラス(MyDataGridクラス)のコードを以下に示します。