Обновляя код из предыдущего ответа , мы можем либо удалить обработчик, прежде чем добавить его (потому что удаление не завершится неудачей, если нет обработчиков):
private void UltraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
var column = e.Layout.Bands[YOUR_BAND_INDEX].Columns[YOUR_COLUMN_INDEX];
column.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.URL;
var editor = column.Editor as FormattedLinkEditor;
//remove the handler before add, to prevent adding multiple handlers
editor.LinkClicked -= this.Editor_LinkClicked;
editor.LinkClicked += this.Editor_LinkClicked;
}
Или мы можем использовать одно из свойств Tag
элементов управления, чтобы помнить, что мы добавили обработчик для этого. Элементы управления Windows имеют свойство Tag
, которое является объектом и предназначено для хранения данных общего назначения, связанных с элементом управления. Если мы сохраним строку в теге и проверим ее позже, мы можем избежать многократного добавления обработчика. Возможно, как один из них:
private void UltraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
var column = e.Layout.Bands[YOUR_BAND_INDEX].Columns[YOUR_COLUMN_INDEX];
//did we add the handler already?
if(column.Tag != null && column.Tag.ToString() == "handlerIsAdded")
return;
column.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.URL;
var editor = column.Editor as FormattedLinkEditor;
editor.LinkClicked += this.Editor_LinkClicked;
column.Tag = "handlerIsAdded"; //remember for next time, so we don't add handler again
}
Я не знаю, хотите ли вы добавить это на уровне столбца или на уровне редактора; Я никогда не работал с элементом управления сеткой, который вы используете. Если для столбца есть только один элемент управления редактором, и он не обновляется, вы также можете использовать элемент управления редактора:
private void UltraGrid1_InitializeLayout(object sender, InitializeLayoutEventArgs e)
{
var column = e.Layout.Bands[YOUR_BAND_INDEX].Columns[YOUR_COLUMN_INDEX];
column.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.URL;
var editor = column.Editor as FormattedLinkEditor;
//did we add the handler already?
if(editor.Tag != null && editor.Tag.ToString() == "handlerIsAdded")
return;
editor.LinkClicked += this.Editor_LinkClicked;
editor.Tag = "handlerIsAdded"; //remember for next time
}