汎用コンポーネント

■ テキストボックス全文字色・背景色変更

     textBox1.ForeColor( ) textBox1.BackColo( )で変更 実行結果

          

   <プログラム例>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace textBoxColor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.ForeColor = Color.Red;     //文字色変更
            textBox1.BackColor = Color.Yellow;  //文字背景色変更

            textBox1.Text = ("本日は晴天なり\r\n");    // \r(復帰)  \n(改行)
            textBox1.Text += ("只今マイクの試験中");     // += 前の文字列に、本行の文字列をつなげる 

        }
    }
}



 リッチテキストボックス行単位の文字追加・改行・文字色変更 

    richTextBox1.SelectionColor、richTextBox1.SelectedText、\r 実行結果

          

   <プログラム例>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace textBoxColor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.SelectionColor = Color.Red;    //赤色を選択
            richTextBox1.SelectedText= "abc\r\n";   //次の文字列だけ赤色選択
            richTextBox1.SelectedText += "ABC\r\n\n";   //元の色に戻る

            richTextBox1.SelectionColor = Color.Blue;   //青色を選択
            richTextBox1.SelectedText += "defg\r\n";    //次の文字列だけ青色選択
            richTextBox1.SelectedText += "DEFG\r\n\n";  //元の色に戻る

            richTextBox1.SelectionColor = Color.Green;  //緑色を選択
            richTextBox1.SelectedText += "hijkl\r\n";//次の文字列だけ緑色選択
            richTextBox1.SelectedText += "HIJKL\r\n\n"; //

        }
    }
}







■ リッチテキストボックス: カーソルの位置取得

  リッチテキストボックス内のカーソルの位置(列と行)を取得します。 列はカーソルがある位置の前方にある文字の数とします。
・ richTextBox1.SelectionStart で全文字列に於ける前方文字数を取得できます。
・ 前方文字の中には改行の \n が含まれていることから、\nの数を数えて行数を計算します。
・  str.IndexOf('\n', startPosi)より、 IndexOf()メソッドを使い 文字列strのstartPosi番目以降で何番目に\nがあるかを取得し行をカウントします。
・ カーソル位置変更のイベントはrichTextBox1_SelectionChanged(object sender, EventArgs e)関数の中に記載する。
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RichtextBox_Cursol
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

richTextBox1.Clear();
richTextBox1.AppendText("1. Tokyo\n");
richTextBox1.AppendText("2. Osaka\n");
richTextBox1.AppendText("3. Nagoya\n");

}

private void richTextBox1_SelectionChanged(object sender, EventArgs e) //リッチテキストボックス内でカーソルの位置が変わると呼ばれる
{

int CurrentPosi; //全文字列に於ける、カーソルの現在位置
int col; //カーソルがある行に於ける、カーソルの列位置
int row; //カーソルの行位置
int startPosi; //str.IndexOf(char*, startPosi) 検索を開始する列位置


string str = richTextBox1.Text;

//全文字列における、カーソルの現在位置を取得
CurrentPosi = richTextBox1.SelectionStart; //カーソルの前にある全文字数(含む\n)を取得できる
textBox1.Text = CurrentPosi.ToString(); //全文字列に於ける列の位置を表示

//カーソルの位置までの行を数える → 改行記号'\n'を数える
row = 1;
startPosi = 0;
for (int endPosi = 0;
(endPosi = str.IndexOf('\n', startPosi)) < CurrentPosi && endPosi > -1; //str.IndexOf('\n', startPosi) →'\n'がある位置を返す
row++)
{
startPosi = endPosi + 1; //'\n'があった位置+1 → 次の行の先頭の文字位置
}

//カーソルがある行に於ける、列位置の計算
col = CurrentPosi - startPosi ;


textBox2.Text = col.ToString(); //列の位置表示

textBox3.Text = row.ToString(); //行の位置表示

//追記  //★ リッチテキストボックスには カーソル位置の行を取得できる GetLineFromCharIndexメソッドがありました。 // int CurrentPosi = richTextBox2.SelectionStart; // int row = richTextBox2.GetLineFromCharIndex(CurrentPosi);


}
}
}
   <動作結果>
 
 
 

 リッチテキストボックス: カーソル行の文字列選択

   リッチテキストボックスに於いて、 カーソルがある行を選択して文字列を取得します。
  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RTbox_CursolColorChange
{
public partial class Form1 : Form
{
int Num;
public Form1()
{
InitializeComponent();

richTextBox1.Clear();
richTextBox1.AppendText("1. Tokyo\n");
richTextBox1.AppendText("2. Sendai\n");
richTextBox1.AppendText("3. Nagoya\n");
richTextBox1.AppendText("4. Osaka\n");
richTextBox1.AppendText("5. Hiroshima\n");
richTextBox1.AppendText("6. Kumamoto\n");

//カレット位置を末尾に移動
richTextBox1.SelectionStart = richTextBox1.Text.Length;
//テキストボックスにフォーカスを移動
richTextBox1.Focus();
//カレット位置までスクロール
richTextBox1.ScrollToCaret();

//richTextBox1.Select(0, 0); //カーソル位置: 文字列の先頭
}


private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{

int CurrentPosi; //全文字列に於ける、カーソルの現在位置
int col; //カーソルがある行に於ける、カーソルの列位置
int row; //カーソルの行位置
int startPosi; //str.IndexOf(char*, startPosi) 検索を開始する列位置





string str = richTextBox1.Text;

//全文字列における、カーソルの現在位置を取得
CurrentPosi = richTextBox1.SelectionStart; //カーソルの前にある全文字数(含む\n)を取得できる
// textBox1.Text = CurrentPosi.ToString(); //全文字列に於ける列の位置を表示




//カーソルの位置までの行を数える → 改行記号'\n'を数える
row = 1;
startPosi = 0;
for (int endPosi = 0;
(endPosi = str.IndexOf('\n', startPosi)) < CurrentPosi && endPosi > -1; //str.IndexOf('\n', startPosi) →'\n'がある位置を返す
row++)
{
startPosi = endPosi + 1; //'\n'があった位置+1 → 次の行の先頭の文字位置
}

//表示
string strLine = richTextBox1.Lines[row - 1];//選択文字列
textBox1.Text = strLine; //選択文字列
textBox2.Text = strLine.Length.ToString(); //選択行の文字列長さ
textBox3.Text = row.ToString(); //行の位置表示

//カーソル行の文字列の選択
//見つかった位置を選択開始の位置にする
richTextBox1.SelectionStart = startPosi;

//探した文字列の長さを選択する文字列の長さにする
richTextBox1.SelectionLength = strLine.Length;

// //選択後 選択された文字の色(文字の背景色)を変えたい場合
//Num++;
//if (Num >= 6)
//{
// richTextBox1.SelectionColor = Color.Red; //richTextBox1.SelectionBackColor = Color.Red;
//}

}

private void textBox1_TextChanged(object sender, EventArgs e)
{

}
}
}
 
  実行結果
  1行目選択
  3行目選択
  6行目選択



■ リッチテキストボックス: 行の削除

    リッチテキストボックスの 5行目を削除する例です
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace richText_Remove_Line
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

for (int Gyou = 0; Gyou < 10; Gyou++)
{
richTextBox1.AppendText("行番号: " + Gyou + "\n");
}
}

private void button1_Click(object sender, EventArgs e)
{
//行のstring 配列の生成と初期化 //宣言
// Create a string array and store the contents of the Lines property.
string[] tempArray = new string[richTextBox1.Lines.Length]; //一時作業用配列
tempArray = richTextBox1.Lines;

int N = richTextBox1.GetFirstCharIndexFromLine(5); //リッチテキストボックスの5行目の先頭のインデックスを取得
string tempStr = tempArray[5];

int count = tempStr.Length; //countに改行コード\nは含まれない

richTextBox1.Text = richTextBox1.Text.Remove(N, count + 1); //改行コード分として+1を行う
}
}
}
   実行結果
   実行前  実行後
 






■ リストボックス: カーソル行の文字列選択

   リストボックスに於いて、 カーソルがある行を選択して文字列を取得します。
行を検出する関数が用意されているので、リストボックスにくらべて格段に簡単です。
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ListBoxt_Cursol_Item
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();


listBox1.Items.Clear(); //リストボックス値クリア
listBox1.Items.Insert(0, "Tokyo");
listBox1.Items.Insert(1, "Sendai");
listBox1.Items.Insert(2, "Nagoya");
listBox1.Items.Insert(3, "Osaka");
listBox1.Items.Add("Hiroshima");
listBox1.Items.Add("Kumamoto");


listBox1.SelectedIndex = 0; //初期値設定



}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int i;

i = listBox1.SelectedIndex + 1; //0行目から始まるので +1 を加算 → 1行目から始まるように変更

textBox1.Text = i.ToString(); //行を表示


textBox2.Text = listBox1.SelectedItem.ToString(); //リストボックスのアイテム表示
}
}
}
 
  実行結果
  1行目選択
  4行目選択
  6行目選択









■ コンボボックス、リストボックス読み書き

   Britainを選択してボタンをクリックするとItem[2]がBritainになります。
実行結果
   <プログラム例>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CombListBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();


            comboBox1.Items.Clear();      //コンボボックス値クリア


            comboBox1.Items.Insert(0, "Japan");    //Item[0]設定
            comboBox1.Items.Insert(1, "America");  //Item[1]設定
            comboBox1.Items.Insert(2, "Britain");  //Item[2]設定
            comboBox1.Items.Add("German");                //アイテム追加

            comboBox1.SelectedIndex = 2;                   //初期値設定

            listBox1.Items.Clear();       //リストボックス値クリア
            listBox1.Items.Insert(0, "青森");
            listBox1.Items.Insert(1, "岩手");
            listBox1.Items.Insert(2, "秋田");
            listBox1.Items.Insert(3, "宮城");
            listBox1.Items.Add("福島");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items[2] = comboBox1.SelectedItem;   //コンボボックスス選択値をリストボックスItem[2]にセット

        }
    }
}