/// <summary> /// /// </summary> public MyTextbox() { vScrollBar = new VScrollBar(); hScrollBar = new HScrollBar(); vScrollBar.Dock = DockStyle.Right; hScrollBar.Dock = DockStyle.Bottom; vScrollBar.Value = 0; vScrollBar.Minimum = 0; vScrollBar.Scroll += vScrollBar_Scroll; vScrollBar.ValueChanged += vScrollBar_ValueChanged; this.Controls.Add(vScrollBar); this.Controls.Add(hScrollBar); list = new List<MyLine>(); MyLine firstLine = new MyLine(); list.Add(firstLine); this.Font = MyTextboxDefaultValue.Font; this._returnCode = MyTextboxDefaultValue.ReturnCode; this.AllowDrop = true; this.DragDrop += new DragEventHandler(MyTextbox_DragDrop); caret = new Caret(this.Handle, 2, this.Font.Height); CurrentPhysicalPosition = new PhysicalPosition(0, 0); history = new List<Task>(); }
public MyLine(string str, MyReturnCode myReturnCode) { // TODO: Complete member initialization this.Text = str; this.ReturnCode = myReturnCode; }
static MyTextboxDefaultValue() { Font = new Font("メイリオ", 10); Brush = Brushes.Black; ReturnCode = new MyReturnCode(returnCode.CRLF); }
public MyLine() { Text = ""; this.ReturnCode = new MyReturnCode(); }
/// <summary> /// List<MyLine>の中のMyLine中にある文字列の改行コードを見つけて、MyLineを再帰的に分割する。 /// </summary> /// <param name="ret">処理し終えた部分</param> /// <param name="tmp">未処理部分</param> /// <param name="returnCode"></param> /// <returns></returns> private List<MyLine> LineSplitter(List<MyLine> ret, List<MyLine> tmp, MyReturnCode returnCode) { // もう処理するものが無かったら、終わり if (tmp.Count == 0) return ret; else { // 未処理の配列の先頭行を取得し、未処理配列から消す。 MyLine a = tmp[0]; tmp.RemoveAt(0); // 文字列をreturnCodeで分割する。 string[] arr = MyLibrary.MyStringTool.StringSplitter(a.TextWithoutReturnValue, returnCode.ToString()); // 分割した文字列を1つずつ配列に変換する。 for(int i = 0;i<arr.Length;++i) { ret.Add(new MyLine(arr[i], returnCode)); } // 処理中配列の最後の要素の改行コードはreturnCodeではなく、a.ReturnCodeである。 ret[ret.Count - 1].ReturnCode = a.ReturnCode; return LineSplitter(ret, tmp, returnCode); } }