タグ

ブックマーク / dobon.net (20)

  • プラグイン機能を持つアプリケーションを作成する

    Adobe PhotoshopやBecky! Internet Mailなどのアプリケーションでは、「プラグイン」(または、「アドイン」、「エクステンション」等)と呼ばれるプログラムをインストールすることにより、機能を追加することができるようになっています。ここでは、このようなプラグイン機能を持ったアプリケーションの作り方を考えます。(プラグインが何だか分からないという方は、「アスキー デジタル用語辞典」や「IT用語辞典 e-Words」等をご覧ください。) 早速ですが、プラグイン機能の実現のために参考になりそうな記事を以下にいくつか紹介します。 Developer Fusion - Writing Plugin-Based ApplicationsDevSource - Building Plug-ins with C# .NETSA Developer .Net - PluginFX

    プラグイン機能を持つアプリケーションを作成する
  • C#のイベント機能: .NET Tips: C#, VB.NET

    C#のイベント機能VBでイベント機能を利用するには、イベントを発生させるクラスでEventステートメントによりイベントを宣言し、RaiseEventステートメントによりイベントを発生させ、イベントを受信するクラスではWithEventsで変数を宣言することなどにより簡単に可能となる。これと同様のことをC#で行うにはどのようにすればよいのだろうか。 これがVBほど簡単にはいかない。ヘルプなどを調べると「デリゲート」やら「イベントハンドラ」などの「?」な言葉が並ぶ。ここではこれらの理屈は抜きにしてこれらを実現させる簡単な方法を考えてみる。 最も簡単な(?)イベントまず次のような超単純なクラス「SleepClass」を作ってみる。ここではまだイベントを使用していない。とりあえずStartメソッドを実行すると5秒間停止するだけである。

    C#のイベント機能: .NET Tips: C#, VB.NET
  • DataGridViewの列にコンボボックスを表示する - .NET Tips (VB.NET,C#...)

    'DataTableを作成する Dim dt As New DataTable() '文字列型のWeek列を追加する dt.Columns.Add("Week", GetType(String)) 'Week列に日曜日~土曜日のデータを追加する dt.Rows.Add("日曜日") dt.Rows.Add("月曜日") dt.Rows.Add("火曜日") 'DataGridViewにデータソースを設定する DataGridView1.DataSource = dt //DataTableを作成する DataTable dt = new DataTable(); //文字列型のWeek列を追加する dt.Columns.Add("Week", typeof(string)); //Week列に日曜日~土曜日のデータを追加する dt.Rows.Add("日曜日"); dt.Rows.Add(

    DataGridViewの列にコンボボックスを表示する - .NET Tips (VB.NET,C#...)
  • 隠蔽されている非パブリックメンバを呼び出す

    隠蔽されている非パブリックメンバを呼び出す「型のメンバを動的に呼び出す」で紹介したように、リフレクションを使うことにより、来はアクセス範囲外の非パブリックメンバを呼び出すことができます。ただし、言うまでも無いことですが、公開されていないメンバはそうなっている理由があるはずなので、アクセスできたとしてもすべきではありません。ただ、「できないことは無い」というだけの話です。 「DataGrid内の指定された行までスクロールする」ではDataGridクラスのProtectedメンバであるGridVScrolledメソッドを呼び出すためにDataGridクラスの派生クラスを作成しましたが、GridVScrolledメソッドを直接呼び出すコードを以下に示します。 'DataGrid1のTypeを取得 Dim t As Type = DataGrid1.GetType() 'パラメータで渡すScro

    隠蔽されている非パブリックメンバを呼び出す
  • デバッガ変数ウィンドウに表示される内容を変更する

    デバッガ変数ウィンドウに表示される内容を変更するデバッグ中にVisual Studioのコードエディタで変数の上にマウスポインタを移動させると、ツールチップが表示されます。また、デバッガ変数ウィンドウにも変数の情報が表示されます。これらに表示される内容を変更する方法について、ここでは説明します。 値、名前、型の表示を変更する例えば、以下の様なクラスがあったとします。 Class SampleClass Private _message As String = "こんにちは。" Public Property Message() As String Get Return Me._message End Get Set(ByVal value As String) Me._message = value End Set End Property Private _words As String

    デバッガ変数ウィンドウに表示される内容を変更する
    sheephuman
    sheephuman 2017/12/29
    “デバッガ変数ウィンドウに表示される内容を変更する”
  • TextBoxに数字しか入力できないようにする

    TextBoxに数字しか入力できないようにするここでは、テキストボックス(TextBoxコントロール)に数字以外の文字が入力できないようにする方法を幾つか紹介します。 注意:ここで紹介した方法だけでは、数字以外の文字列が入力されることを完全に防げることはできません。入力された文字列が当に数字だけか確かめ、そうでなければ拒否するためには、必ずTextBoxのValidatingイベントを使用してください。文字列が数値に変換できるか調べる方法に関しては、「文字列が数字に変換できるか調べる」をご覧ください。

    TextBoxに数字しか入力できないようにする
    sheephuman
    sheephuman 2017/11/21
    完璧なのは最後の「CreateParamsをオーバーライドする方法」だと思う
  • Re[14]: ListViewの画像のドラッグアンドドロップ - DOBON.NETプログラミング道掲示板

    ■No33696に返信(やすさんの記事) > サンプル開発中なのでソースを添付しておきます *.cs ファイルしかなく、*.designer.cs が無いので 開けるように再加工するのが面倒でした…。 > ListViewに画像を表示して2つのListViewの間をドラッグアンドドロップで > 移動させたいのですが、移動できるが移動させた画像が渡らないという > 現象が発生しております。 designer.cs が無いので、コンストラクタだけ弄って補間しましたが、 こちらの環境では普通に移動されました。 ImageList の割り当てに問題があるのでは無いですかね。 public ImageTransporter() { // フォームに ListView 2 つ(listRoot、listDest)のみ貼った状態です // プロパティは位置・サイズ・名前以外は初期値のままとしています。

  • カレントディレクトリ(現在の作業ディレクトリ)を取得、設定する

    カレントディレクトリ(現在の作業ディレクトリ)を取得、設定するここでは、現在のプロセスのカレントディレクトリ(現在のディレクトリ、作業ディレクトリ)を取得または設定する方法を説明します。カレントディレクトリを使うと、様々なメソッドやプロパティでファイルのパスを指定するとき、カレントディレクトリからの相対パスで指定することができます。カレントディレクトリについて詳しくは、Wikipediaなどでお調べください。 現在のプロセスのカレントディレクトリを取得、設定するには、Environment.CurrentDirectoryプロパティを使います。または、DirectoryクラスのGetCurrentDirectoryとSetCurrentDirectoryメソッドを使っても同じことができます。 カレントディレクトリは、変更しなければ、プロセスが開始されたディレクトリになります。 'カレントデ

    カレントディレクトリ(現在の作業ディレクトリ)を取得、設定する
    sheephuman
    sheephuman 2017/07/01
    相対パス
  • WPFコントロールをWindowsフォームに配置する

    WPFコントロールをWindowsフォームに配置するWPFコントロール(WPF要素、UIElement)をWindowsフォームに配置(ホスト)するには、ElementHostコントロールを使います。方法は、ElementHost.ChildプロパティにWPFコントロールを割り当てたElementHostコントロールをWindowsフォームに配置するだけです。 ElementHostコントロールはWindowsFormsIntegration.dll内にありますので、使用するにはWindowsFormsIntegration.dllを参照に追加する必要があります。また、WPFコントロールを使用するためにPresentationFramework.dll、PresentationCore.dll、WindowsBase.dllも参照に追加します。さらに.NET Framework 4.0以降

    WPFコントロールをWindowsフォームに配置する
  • オブジェクトの内容をXMLファイルに保存、復元する: .NET Tips: C#, VB.NET, Visual Studio

    オブジェクトの内容をファイルに保存、復元する オブジェクトのXMLシリアル化、逆シリアル化を行うオブジェクトの内容をXMLファイルにして保存し、そのXMLファイルから元のオブジェクトに復元できると色々と便利です。例えば、INIファイルの代わりとして、設定を保存、復元したい時などに有用です。(設定を保存する場合は、「アプリケーションの設定を保存する」も参考にしてください。) これを行うには、XmlSerializerクラス(System.Xml.Serialization名前空間)を使うと簡単です。XMLファイルに書き込む時はSerializeメソッドを使ってオブジェクトをXMLシリアル化(シリアライズ)し、XMLファイルを読み込む時はDeserializeメソッドを使ってXML逆シリアル化(デシリアライズ)をします。 オブジェクトの内容をXMLファイルに保存(シリアル化)する次のコードでは

    オブジェクトの内容をXMLファイルに保存、復元する: .NET Tips: C#, VB.NET, Visual Studio
  • コントロールのダブルバッファリングを有効にして、ちらつきを防止する

    コントロールのダブルバッファリングを有効にして、ちらつきを防止するコントロールの表示がちらつく時は、コントロールのダブルバッファリングを有効にすると改善することがあります。ここでは、コントロールのダブルバッファリングを有効にする方法を紹介します。 なお、ダブルバッファリングにすればすべてのちらつきを解消できるという訳ではありません。ちらつきの原因には様々なものがあり、ダブルバッファリングでは解決できないものもあります。ダブルバッファリングへの過剰な期待は禁物と言えるでしょう。 ダブルバッファリングとは?まずはダブルバッファリングについて簡単に説明します。 コントロールが描画される時、通常は、背景が描画されてから、前景が描画されます。この描画を直接画面に行うと、背景が描画された時に一瞬前景が消えるため、ちらついて見えてしまいます。 ダブルバッファリングを有効にすると、コントロールの描画はまず

    コントロールのダブルバッファリングを有効にして、ちらつきを防止する
    sheephuman
    sheephuman 2017/05/30
    WS_EX_COMPOSITEDを使用する方法 が良かった。フォームリサイズ時の空白が無くなった。
  • フォームを表示させずにトレイアイコンを表示する

    フォームを表示させずにトレイアイコンを表示するここでは、アプリケーション起動時にフォームを表示させないで、NotifyIconコンポーネントを使用してタスクトレイにアイコンを表示する方法を考えます。ここで紹介する幾つかの方法は、メインフォームを表示せずにアプリケーションを開始する方法としても利用できます。 なお、NotifyIconコンポーネントでタスクトレイにアイコンを表示する方法については、ここでは説明しません。分からないという場合は、まず「タスクトレイにアイコンを表示する」をご覧ください。 普通に考えれば、NotifyIconコンポーネントをフォームに貼り付けて、そのフォームのVisibleプロパティをFalseにしてアプリケーションを開始すれば目的が果たせるように思われますが、このようにしてもメインフォームは表示されてしまいます。よって、メインフォームを隠す何らかの対策が必要になり

    フォームを表示させずにトレイアイコンを表示する
    sheephuman
    sheephuman 2017/05/30
    CreateParamsプロパティをオーバーライドする方法では完全にフォームが開かずちらつきが無くなった。
  • TextBox(またはRichTextBox)の現在のカレット位置(行と列)を取得する

    TextBox(またはRichTextBox)の現在のカレット位置(行と列)を取得するテキストボックス(またはリッチテキストボックス)内で現在カレットのある行と列を取得する方法を紹介します。 論理的に行を数える行を理論的に数えるとは、改行文字までを一行として数える方法です。テキストボックスのWordWrapプロパティがTrueの場合は、長い行は右側で折り返されますが、改行文字で折り返されるのでない限り、一行として数えます。 行を論理的に数える場合は、次のようにラインフィードを数えることで計算できます。ここでは、テキストボックス"TextBox1"の現在のカレット位置を計算しています。 '文字列 Dim str As String = TextBox1.Text 'カレットの位置を取得 Dim selectPos As Integer = TextBox1.SelectionStart 'カ

    TextBox(またはRichTextBox)の現在のカレット位置(行と列)を取得する
  • リッチテキストボックスで色とフォントを指定する

    RichTextBoxで文字列の色とフォントを変更するリッチテキストボックスで文字列が選択されている時、RichTextBox.SelectionColorプロパティの値を変更すると、選択されている文字列の色を変更することができます。また、RichTextBox.SelectionBackColorプロパティで背景色を変更できます。さらにRichTextBox.SelectionFontプロパティでフォントを変更できます。 文字列を選択する方法についてはここでは説明しませんので、「TextBox(またはRichTextBox)で選択されている文字列の取得と設定」をご覧ください。 指定した位置にある文字列の色とフォントを変更する下の例では、リッチテキストボックス(RichTextBox1)の3文字目から5文字の色を赤、フォントを斜体に変更しています。 'Imports System.Draw

    リッチテキストボックスで色とフォントを指定する
    sheephuman
    sheephuman 2016/11/21
    「文字列を検索して、色とフォントを変更する」で、部分的な文字色変更、フォントサイズの変更まで行う事が出来た。 注釈:http://mojakouinfotaker.blog.fc2.com/blog-entry-882.html
  • フォームやコントロールの形を変える

    フォームを平方四辺形にする次の例ではフォーム(Form1)の形を平方四辺形にします。ここではフォームのLoadイベントハンドラ内にコードを書いていますが、もちろんフォームのコンストラクタ内などでも構いません。 Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load 'フォームのサイズを適当に変更 Me.SetBounds(Me.Left, Me.Top, 201, 101, _ BoundsSpecified.Size) '多角形の頂点の位置を設定 Dim points() As Point = _ {New Point(0, 0), _ New Point(100, 100), _ New Point(200, 100), _ New

    フォームやコントロールの形を変える
    sheephuman
    sheephuman 2016/11/21
    テスト済み。おもしろい。
  • タイトルバーのないフォームを移動できるようにする

    タイトルバーのないフォームを移動できるようにするタイトルバーを持たないフォームをマウスで移動させる方法を紹介します。 マウスイベントによる方法まずは、最も基的なやり方です。次のコードでは、単純にフォーム(Form1)上でマウスの左ボタンが押され、移動させたことを感知することにより処理しています。 'マウスのクリック位置を記憶 Private mousePoint As Point 'Form1のMouseDownイベントハンドラ 'マウスのボタンが押されたとき Private Sub Form1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles MyBase.MouseDown If (e.Button And MouseButtons.Left) =

    タイトルバーのないフォームを移動できるようにする
    sheephuman
    sheephuman 2016/11/17
    テスト済み。これをbuttonなどにもイベント登録すると、同様に動作させることができた。フィールドは個別に作った。
  • 【C#】 書式を指定して数値を文字列に変換する: .NET Tips: C#, VB.NET, Visual Studio

    書式を指定して数値を文字列に変換する数値を文字列に変換する方法は「文字列を数値に変換する、数値を文字列に変換する」で説明しました。ここでは、書式(フォーマット)を指定して数値を文字列に変換する方法を説明します。 ToStringメソッドを使えば数値を文字列に変換できますが、その時どのような文字列に変換するかを書式で指定することが出来ます。書式には、文字列を使用します。この文字列を「書式指定文字列」と呼びます。数値を文字列に変換する時に使用される書式指定文字列には、「標準の数値書式指定文字列」と「カスタム数値書式指定文字列」の2種類があります。 標準の数値書式指定文字列は、アルファベット一文字、あるいは、アルファベット一文字と数字から成ります。例えば、通貨に使用される書式は"C"ですが、この書式で 10000 を文字列に変換すると、"\10,000"という文字列になります。 カスタム数値書式

    【C#】 書式を指定して数値を文字列に変換する: .NET Tips: C#, VB.NET, Visual Studio
  • Visual Studioでアプリケーションの設定を保存する

    Visual Studioでアプリケーションの設定を保存するVisual Studio 2005からは、アプリケーションの設定を保存、復元するための機能が追加されました。ここではこの機能の基的な事柄を紹介します。 なお、Visual Studioを使わずにここで紹介していることとほぼ同じことを行いたい場合は、「ApplicationSettingsBaseクラスを使って設定を保存する」をご覧ください(ただしそちらの記事をご覧になる前に、まずはここの記事に一度目を通して、この機能の概要を知っておいてください)。 さらに、.NET Frameworkのバージョンに依存しない方法については、「アプリケーションの設定を保存する」をご覧ください。 設定を作成するまずは、設定を作成します。 プロジェクトのプロパティを表示し(ソリューションエクスプローラでプロジェクトを右クリックして、コンテキストメニ

    Visual Studioでアプリケーションの設定を保存する
    sheephuman
    sheephuman 2016/07/16
    C#
  • ListBoxで選択されている項目の取得と設定

    ListBoxで選択されている項目の取得と設定ここでは、リストボックスで選択されている項目(アイテム)を取得する方法、および、設定する方法を紹介します。しかしその前に、リストボックスの種類について説明します。 単一選択リストボックスと複数選択リストボックスリストボックスには、一つの項目しか選択できないものと、複数の項目を選択できるものの2種類があります。これはリストボックスコントロールのSelectionModeプロパティで変更できます。デフォルトである、SelectionModeプロパティがOneの時は、1つの項目しか選択できません(以下、「単一選択リストボックス」と呼びます)。SelectionModeプロパティをMultiExtendedまたはMultiSimpleに変更することにより、複数項目を選択できるようになります(以下、「複数選択リストボックス」と呼びます)。 MultiEx

    ListBoxで選択されている項目の取得と設定
    sheephuman
    sheephuman 2016/07/14
    リストボックス
  • 指定した時間停止する

    //一秒間(1000ミリ秒)停止する System.Threading.Thread.Sleep(1000); Thread.SpinWaitメソッド指定した時間現在のスレッドを停止するメソッドに、Thread.SpinWaitメソッドというものもあります。Thread.SpinWaitメソッドは、Thread.Sleepメソッドのように時間を秒単位で指定するのではなく、ループカウント(ループする回数)で指定します。そのため、同じ数値を指定しても、待機する時間はCPUによって変わります。 Thread.SpinWaitメソッドは、Thread.Sleepメソッドと違い、ループすることで待機しますので、CPUをほぼ100%占有します。また、Thread.Sleepメソッドを呼び出した場合は、残りのタイムスライスを放棄して、実行の準備ができている他のスレッドに処理を回しますが、Thread.S

    指定した時間停止する
  • 1