【问题标题】:Handling carriage return/line feed in MATLAB GUI user controls在 MATLAB GUI 用户控件中处理回车/换行
【发布时间】:2011-02-17 22:06:24
【问题描述】:

我正在开发一个 MATLAB 程序,以便进行一些图像处理工作,并且需要在我创建的临时用户界面中使用用户控件。

这个用户控件是List Box,我想在那里插入一些文本。好吧,问题不在于我不能把文本放在那里,我可以使用这个调用来做到这一点:

set(handles.mylistbox, 'String', 'MyStringToPrint');

问题是这个调用不允许我在列表框中插入很多行,而只是覆盖前一个。

我希望找到一种方法让我的代码在新行中插入新文本。这应该不难做到,也是一个简单的模式:

texttoprint = 'My text to add'
oldtext = get(handles.MyListBox, 'String') %Holding the previous text here
set(handles.MyListBox, 'String', [oldtext '\n' texttoprint]) %Setting (no line feed printed)
set(handles.MyListBox, 'String', [oldtext char(10) texttoprint]) %Setting (this fails too)

没关系,它不会引发任何错误但是,\n 不起作用。 我没有任何新行...但需要!!!!

我应该如何解决这个问题? 问题是我需要在这个用户控件中打印文本,而不是在 MATLAB 命令行上(这很简单,只需执行sprintf())。

怎么办?谢谢

【问题讨论】:

    标签: matlab text user-controls newline carriage-return


    【解决方案1】:

    对于列表框,将字符串属性设置为单元格

    set(myListboxHandle,'String',{'myFirstLine';'mySecondLine'})
    

    如果要添加另一行,请调用

    contents = get(myListboxHandle,'String');
    set(myListboxHandle,[contents;{'another line'}])
    

    另外,对于 GUI 中的多行文本,请使用 char(10) 而不是 \n,即

    set(someUiControlHandle,'String',sprintf('my first line%smy second line',char(10)))
    

    【讨论】:

    • 谢谢,但我需要参数化地添加行。我不知道有多少行......你根据有两条线的事实给我举个例子,但我不知道它们是多少?此外, sprintf 用于命令行输出,在这里对我没有用...... :( 也许我误解了一些东西......请告诉我我是否正确。
    • @Andry:我添加了一个额外的例子。
    【解决方案2】:

    使用列表框时,将选项处理为cell array of strings 通常更容易。因此,您将按如下方式初始化列表框:

    set(handles.MyListBox,'String',{'Option 1'});
    

    然后您可以像这样向列表框中添加选项:

    newOption = 'Option 2';
    oldOptions = get(handles.MyListBox,'String');
    set(handles.MyListBox,'String',[oldOptions; {newOption}]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-23
      相关资源
      最近更新 更多