1

我正在使用 GUIDE 构建一个 GUI,并且我有一个列表框,我希望在单击后在其中接收几条消息,send_button但每次单击按钮时,消息都会显示在第一行。

function send_button_Callback(hObject, eventdata, handles)
% hObject    handle to send_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)  

  % get text
  dstID = get(handles.dest_ID,'String');
  msg = get(handles.message_box,'String');    % message_box = editbox

  % Build message and send
  msg = {['< ', dstID, ' >     ', msg]};      % dstID = number
  set(handles.message_list, 'String', msg);   % message_list = listbox

我应该怎么做才能拥有类似的东西

<3> Message one
<3> Message two
<3> Message three

我认为发生这种情况是因为msg它是一个字符串,但我不知道如何插入一个'\n'或类似的东西。

4

3 回答 3

2

您可以获取包含列表框项目的字符串元胞数组get(handles.message_list,'string')。这是解决您的问题的方法。

function send_button_Callback(hObject, eventdata, handles)
% hObject    handle to send_button (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)  

% get text
dstID = get(handles.dest_ID,'String');
msg = get(handles.message_box,'String');    % message_box = editbox

%get lisbox cell array of strings
cell_listbox = get(handles.message_list,'string');
%length is needed in order to append the desired message at the end
length_cell_listbox = length(cell_listbox);

% Build message and send
msg = ['< ', dstID, ' >     ', msg];      % dstID = number
cell_listbox{length_cell_listbox + 1} = msg;
set(handles.message_list, 'String', cell_listbox);   % message_list = listbox

使用相同的想法,您甚至可以创建一个按钮来删除存储在列表框中的最后一条消息。

于 2013-08-13T07:39:25.810 回答
0

尝试这个:

...
msg=get(handles.message_box,'String');    % message_box = editbox
...
cell_listbox = get(handles.message_list,'string');
...
cell_listbox(end+1)=msg;

如果您遇到错误,请提供它出现在哪一行:)

于 2013-08-13T12:35:39.550 回答
0

如果要将新消息附加到顶部,则需要一个以新消息开头的元胞数组。如果您的消息太长,请重新调整它们。dstID请注意,在以下示例中,如果大于 9,则第一行可能太长,您可能需要更正maxlinelength以解决此问题。

maxlinelength = 25; %// maximum number of characters per line -5
current = get(handles.message_list,'string');

msg = get(handles.message_box,'String');    %// message_box = editbox
rows = ceil(length(msg)/maxlinelength);
msg = [char(8,8,8,8)' '< ' dstID ' > ' msg]; %'// append dstID display
newmsg = cell(1,rows);
for i=1:rows-1 %// for each row
    newmsg{i} = ['    ' a(1:maxlinelength)]; %// store the row in the new cell
    a = a(maxlinelength:end); %// cut off the row from the message
end
newmsg{rows} = ['    ' a]; %// last cell is the rest of msg

new = {msg,current{:}}; %// build new cell aray with msg at the front
set(handles.message_list, 'String', new);   %// message_list = listbox

new如果要显示最大行数,也可以在设置为之前先截断'String'

if length(new)>maxlines
    new = new(1:maxlines);
end

char(8,8,8,8)'前面带有退格键的行msg删除了稍后将添加的 4 个空格。如果您更改换行符缩进,请在此处更改 8 的数量。例如,如果您选择缩进 2 个空格,则变为char(8,8)'.

于 2014-01-29T16:44:02.633 回答