C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: C#でのTextBoxの受け渡しについて


(過去ログ 144 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■84646 / inTopicNo.1)  C#でのTextBoxの受け渡しについて
  
□投稿者/ うっちー (1回)-(2017/07/25(Tue) 13:03:37)

分類:[C#] 

初めまして、ただ今、C#での開発を勉強しております。
DLLを用いて、共通的にTextBoxを制御するDLLを作りたいと思ってます。
現状下記の通り設定することで、各種イベントが複数のコントロール(例ではTextBox1の操作ですべてのイベントが起動)
で同一の動作をすることが確認できましたので、上手くいくかなと思ったのですが、
★問題の箇所において、virtualTextBox.Textは選択したTextの値を取得できるかと思いきや、
空白となっており、うまくつながっていないおりませんでした。
TextBoxをDLLで取りまとめて制御する方法がこれ以外いまいち思い浮かばず、
もっと筋の良い方法、もしくは、当該方法でのvirtualTextBox.Textをうまく呼び出し元のTextBox1.Textと
同じ振る舞いになるよう設定する方法があればご教授頂けますと幸いです。

・DLL-----------------ここから----------------
class Text_Utl_class
{
public System.Windows.Forms.TextBox virtualTextBox;
public virtual void setTextBox(TextBox obj, Enum enum_att)
{
virtualTextBox = obj; //TextBoxの設定作業

//イベントの作成
virtualTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(Text_Utl_KeyDown);
virtualTextBox.Enter += new System.EventHandler(Text_Utl_Enter);
virtualTextBox.Validated += new System.EventHandler(Text_Utl_Validated);
virtualTextBox.Leave += new EventHandler(Text_Utl_Leave);

}
private void Text_Utl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//キー入力制御領域
}
private void Text_Utl_Enter(object sender, EventArgs e)
{
// IME制御を行う領域
}
private void Text_Utl_Leave(object sender, EventArgs e)
{
// 検証を行う領域
}
private void Text_Utl_Validated(object sender, EventArgs e)
{
// 検証後ValueにDB値(保存値)、Textに表示値を設定する領域
virtualTextBox.Tag = virtualTextBox.Text; //★問題の箇所
virtualTextBox.Text = virtualTextBox.Text; //★問題の箇所
}
}

・DLL-----------------ここまで----------------
・利用側-----------------ここから----------------
#region "メンバ"
Text_Utl.Text_Utl_class _Text_Utl = new Text_Utl.Text_Utl_class();
#endregion

public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
_Text_Utl.setTextBox(textBox1);
}
・利用側-----------------ここまで----------------

引用返信 編集キー/
■84647 / inTopicNo.2)  Re[1]: C#でのTextBoxの受け渡しについて
□投稿者/ furu (108回)-(2017/07/25(Tue) 13:32:10)
No84646 (うっちー さん) に返信

なんとなく、疑問

> public virtual void setTextBox(TextBox obj, Enum enum_att)

なんでvirtualなんだろ

> virtualTextBox.Text = virtualTextBox.Text; //★問題の箇所

なんの為の代入
引用返信 編集キー/
■84650 / inTopicNo.3)  Re[2]: C#でのTextBoxの受け渡しについて
□投稿者/ うっちー (2回)-(2017/07/25(Tue) 13:52:09)
No84647 (furu さん) に返信
> ■No84646 (うっちー さん) に返信
>
> なんとなく、疑問
>
>> public virtual void setTextBox(TextBox obj, Enum enum_att)
>
> なんでvirtualなんだろ
→試行錯誤の最中の消し忘れでした。すみません。
public void setTextBox(TextBox obj, Enum enum_att)
     →上記にて動作を確認してます。

>
>> virtualTextBox.Text = virtualTextBox.Text; //★問題の箇所
>
> なんの為の代入
→ここもある程度テスト中でしたので、曖昧でした。すみません。
 イメージで言えばになりますが、Leaveイベントにて入力値検証を行った後、
 Validatedイベントで値を変換したものを設定する箇所にしたかったです。
 (例:日付であれば、TextBox1.Tagに西暦を(2017/7/25)、TextBox1.Textに和暦を(平成29年7月25日))
  ※そのような処理を作りこむ前に実現可能性を探っている状態でしたが、
   vaturalTextBoxとTextBox1の同一化というか、そういったことが出来ないなと苦心しておりました。
引用返信 編集キー/
■84652 / inTopicNo.4)  Re[3]: C#でのTextBoxの受け渡しについて
□投稿者/ furu (109回)-(2017/07/25(Tue) 15:28:42)
No84650 (うっちー さん) に返信

動くとおもうけどなぁ

書かれていない部分が多く
何が原因かわかんない。

シンプルなテストして
問題点を見つけたほうがいいよ。
引用返信 編集キー/
■84654 / inTopicNo.5)  Re[4]: C#でのTextBoxの受け渡しについて
□投稿者/ うっちー (3回)-(2017/07/25(Tue) 16:30:34)
No84652 (furu さん) に返信
> ■No84650 (うっちー さん) に返信
>
> 動くとおもうけどなぁ
>
> 書かれていない部分が多く
> 何が原因かわかんない。
>
> シンプルなテストして
> 問題点を見つけたほうがいいよ。

→新規に該当部分だけ切り取りクラス、フォーム作成を行ったところ上手くいきました。。。
 furuさんに動くとおもうと言ってもらえてわが身を振り返ることが出来ました。
 有難うございました。
 参考までに動作したソースを張っておきます。

もっと筋のいいやり方については、あれば是非ともご教授ください。
有難うございました。

・DLL
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace UTL_TEST
{
class Text_Utl_class
{
public System.Windows.Forms.TextBox virtualTextBox;
public void setTextBox(TextBox obj)
{
virtualTextBox = obj; //TextBoxの設定作業

//イベントの作成
virtualTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(Text_Utl_KeyDown);
virtualTextBox.Enter += new System.EventHandler(Text_Utl_Enter);
virtualTextBox.Validated += new System.EventHandler(Text_Utl_Validated);
virtualTextBox.Leave += new EventHandler(Text_Utl_Leave);

}
private void Text_Utl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
//キー入力制御領域
MessageBox.Show("Text_Utl_KeyDown");
}
private void Text_Utl_Enter(object sender, EventArgs e)
{
// IME制御を行う領域
MessageBox.Show("Text_Utl_Enter");
}
private void Text_Utl_Leave(object sender, EventArgs e)
{
// 検証を行う領域
MessageBox.Show("Text_Utl_Leave");
}
private void Text_Utl_Validated(object sender, EventArgs e)
{
// 検証後ValueにDB値(保存値)、Textに表示値を設定する領域
virtualTextBox.Tag = virtualTextBox.Text; //★問題の箇所
virtualTextBox.Text = virtualTextBox.Text; //★問題の箇所
MessageBox.Show("Text_Utl_Leave" + virtualTextBox.Text);
}
}

}

・Form
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 UTL_TEST
{
public partial class Form1 : Form
{
UTL_TEST.Text_Utl_class a = new UTL_TEST.Text_Utl_class();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
a.setTextBox(textBox1);
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(textBox1.Text);
MessageBox.Show(textBox1.Tag.ToString() + "たぐ");
}
}
}

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -