Я нашел несколько решений для Objective C и ни одного специально для Monotouch. В итоге я разработал метод расширения, основанный на наиболее популярном решении для IOS:
public static class UIColorExtensions
{
public static UIColor FromHex(this UIColor color,int hexValue)
{
return UIColor.FromRGB(
(((float)((hexValue & 0xFF0000) >> 16))/255.0f),
(((float)((hexValue & 0xFF00) >> 8))/255.0f),
(((float)(hexValue & 0xFF))/255.0f)
);
}
}
, и использую его так:
new UIColor().FromHex(0x4F6176);
Обновление , похоже, что в выключенном Monotouch 5.4 UIColor не имеет конструктора без параметров, поэтому используйте его так:
UIColor.Clear.FromHex(0xD12229);
Это связано с тем, что отредактированное значение ячейки не фиксируется в DataSource до тех пор, пока не будет проверено, что происходит, когда ячейка теряет фокус. Если вы хотите немедленно зафиксировать изменения, вы можете обработать событие CurrentCellDirtyStateChanged и вызвать метод CommitEdit в обработчике:
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
Если я правильно вас понял, ячейка находится в режиме редактирования, и вы пытаетесь программно остановить редактирование и передать значение в базовый источник данных?
Я использую несколько " грязный "подход, чтобы сделать это в одном из моих приложений:
if (dataGridView1.CurrentCell.IsInEditMode)
{
int y = dataGridView1.CurrentCellAddress.Y;
int x = dataGridView1.CurrentCellAddress.X;
if (y > 0)
dataGridView1.CurrentCell = dataGridView1.Rows[y - 1].Cells[x];
else
dataGridView1.CurrentCell = dataGridView1.Rows[y + 1].Cells[x];
dataGridView1.CurrentCell = dataGridView1.Rows[y].Cells[x];
}
Этот фрагмент кода сначала проверяет, находится ли текущая ячейка в режиме редактирования. Затем он программно изменяет текущую ячейку (либо на предыдущую, либо на следующую строку, если мы находимся в первой строке). После этого восстанавливается текущий выбор ячеек.
Этот код можно вызвать в обработчике «Сохранить как файл».
Вы можете получить значение ячейки, которая еще не зафиксирована, используя свойство EditedFormattedValue для текущей ячейки, как показано ниже
dataGridView1.CurrentCell.EditedFormattedValue
Лучший способ (хотя и быстрый и грязный) - присвоить значение currentCell Nothing
.
Например, в методе сохранения выполните:
dgvMyGrid.CurrentCell = Nothing
а затем продолжить.