2

表のセルはクリックだけで編集できるので、ダブルクリックだけで編集できるようにしたいです。単純なクリックでセルが選択されます。

私はこのプロパティを使用していますuitable

set(hTable, 'Data',data,...
    'ColumnEditable', edit,...
4

2 に答える 2

5

最初に、セルの編集可能性をデフォルトで false に設定する必要があります。

set(hTable,'ColumnEditable', [false false ...]);   %accordingly your number of columns

を導入しCellSelectionCallbackます:

set(hTable,'CellSelectionCallback',@cellSelect);

同じスクリプト内で次の関数を呼び出します

function cellSelect(src,evt)
getstate = get(src,'ColumnEditable');  %gets status of editability
index = evt.Indices;                   %index of clicked cell
state = [false false ...];             %set all cells to default: not editable
state(index) = ~getstate(index);       %except the clicked one, was it 
                                       %already false before set it true
set(src,'ColumnEditable', state)       %pass property to table
end

そしてまたCellEditCallback

set(hTable,'CellEditCallback',@cellEdit);

呼び出し

function cellEdit(src,~)
state = [false false ...];
set(src,'ColumnEditable', state)
end

最小限の例

function minimalTable 

h = figure('Position',[600 400 402 100],'numbertitle','off','MenuBar','none');
defaultData  =  {'insert number...' , 'insert number...'};
uitable(h,'Units','normalized','Position',[0 0 1 1],...
              'Data', defaultData,... 
              'ColumnName', [],'RowName',[],...
              'ColumnWidth', {200 200},...
              'ColumnEditable', [false false],...
              'ColumnFormat', {'numeric' , 'numeric'},...  
              'CellSelectionCallback',@cellSelect);

end

function cellSelect(src,evt)
getstate = get(src,'ColumnEditable');
index = evt.Indices;
state = [false false];
state(index) = ~getstate(index);
set(src,'ColumnEditable', state)
end

function cellEdit(src,~)
state = [false false];
set(src,'ColumnEditable', state)
end

あなたが理解したように、これは常に機能するとは限りません。以前のポップアップメニューと同じ問題があるからです。これはまったく同じ問題です:ColumnEditableは単なる行ベクトルであり、行列ではありません。プロパティを処理する必要がありましたColumnFormatが、これも単なる行ベクトルです。ダブルクリック機能が本当に重要な場合は、次の 2 つの回答を参考にしてください。

適切なポップアップ メニューが表示されないようにすることは可能ですか? または: セルをクリックしてコールバックを取得し、行と列のインデックスを返す方法は?

uitableでセルを選択解除する方法/セル選択の強調表示を無効にする方法は?

スレッドは基本的に、すべての行に一意のプロパティuitableを持たせるために、すべての行に一意のものを作成することを提案していColumnEditableます。それが今のところ唯一の解決策です。

簡単な解決策はないのではないかと心配しています。他の回答の複雑な回避策を除いて、これ以上の支援はできません。または、上記の単純なものを使用して、小さな欠点を受け入れてください.

于 2013-11-05T13:48:53.287 に答える