テキストボックス(エ​ディットテキスト)に​文字列を追加する方法

21 views (last 30 days)
koji fukumoto
koji fukumoto on 17 Jul 2019
Commented: koji fukumoto on 22 Jul 2019
GUIDE でテキストボックスを含む GUI を作成しています。
テキストボックスは、処理内容を1行ずつ出力するというものです(動作ログを出力する)。
テキストボックスに文字列を追加するには、どのようにすればよいのでしょうか?
※プロパティのMaxを2.0にして、複数行対応はできております。
テキストボックスのハンドルのStringに
"「元のString」と「追加したい文字列」を結合した文字列"
をセットする、という考えでいるのですが、
hLog.String = strcat(hLog.String, newline, putData);
だと、改行ができませんでした。

Accepted Answer

Kazuya
Kazuya on 20 Jul 2019
セル配列で複数表示できます。例:
hLog.String = {'One','Two','Three'};
ので、セルを追加で結合するイメージで行けると考えましたが、いかがでしょう?
  4 Comments
Kazuya
Kazuya on 22 Jul 2019
function putLog(hLog, putData)
% hLog:テキストボックスのハンドル
% putData:出力内容
str = [hLog.String; {putData}];
hLog.String = str;
と , (コンマ)を ; (セミコロン)に変えて縦方向に連結するようにしてみて試していただけますか?
あとすいません、
hLog.String = {};
hLog.String = [tt.String, {'one'}];
hLog.String = [tt.String, {'two'}];
hLog.String = {};
hLog.String = [hLog.String, {'one'}];
hLog.String = [hLog.String, {'two'}];
の意味で書きました。

Sign in to comment.

More Answers (1)

koji fukumoto
koji fukumoto on 22 Jul 2019
何度もご対応いただき、ありがとうございました。
縦方向に連結することで、思った通りの出力ができました。
ただ、
hLog.String = str;
の処理により、処理に遅延(※)が発生するのですが、高速化の手法として何かございますでしょうか?
ちなみにsetメソッドを使っても同じでした。
※上記1行が無い場合、1000行処理するのに約1秒、
 上記1行がある場合、1000行処理するのに約13秒(後半になるほど、遅くなっている感じ)。
 いずれも、予め「hLog.String = cell(1000,1);」をした状態で測定。
  2 Comments
koji fukumoto
koji fukumoto on 22 Jul 2019
ログの番号を記憶し、順番にhLog.Stringに格納するようにしましたが、結果は変わらずでした。
エディットボックスの描画処理に時間が掛かっているのでしょうか?
だとしたら、ロジックで頑張っても実現は難しいのかな、と思ってきました。
完成イメージは、
function putLog(hLog, putData)
disp(['> SEND:', putData]);
とした場合の、コマンドウインドウのように、
------
> SEND:1
> SEND:2
> SEND:3
> SEND:4
> SEND:5
> SEND:6
・・・
------
と高速(1処理10ms想定)で出力されるというものでしたが、MATLABでは(私の理解度では)無理そうなので
「1行処理時は変数にデータを蓄積、全行処理後に蓄積データをエディットボックスに一括出力」
というやり方に変えようと思います。
色々とアドバイスありがとうございました。

Sign in to comment.

Products


Release

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!