Короткий ответ, нет.
темы чата Сочувствия сделаны поддерживать базирующиеся темы Adium (Mac только клиент IM). Ссылка FAQ о клиенте Сочувствия (первые 3 вопроса отвечают на вопросы о темах Сочувствия и как создать Ваше собственное):
http://live.gnome.org/Empathy/FAQ#How_can_I_install_new_themes_in_Empathy_.3F
темы Гибридного языка используют XML-файл для создания тем списка контактов, которые могут также управлять стилем средства рассылки также:
http://developer.pidgin.im/wiki/BuddyListThemes
Начиная с сообщения Adium код Стиля ( http://trac.adium.im/wiki/CreatingMessageStyles ) использует другую структуру затем Гибридный язык, процесс преобразования мог бы взять некоторое время, но может быть сделан.
, Если Вам действительно нравится стиль сообщения Ubuntu за Гибридный язык, преобразовывая его в тот тема списка контактов , формат файлов XML мог бы быть лучшим способом. Однажды его преобразованное, это может быть предложение Ubuntu упаковочная команда, таким образом, они могут использовать его для будущих установок (просто помещающий это там... принятие желаемого за действительное).
местоположение стиля сообщения Adium, который Вы любите, может быть найдено здесь в Вашей системе:
/usr/share/adium/message-styles/ubuntu.AdiumMessageStyle (directory)
я надеюсь, что это объясняет больше о темах Гибридного языка и Сочувствия.
В простом случае, когда оба элемента управления находятся на одной FlowLayoutPanel
, используйте метод SetChildIndex
в Controls
.
Что-то вроде этого ...
var alphaIndex = panel.Controls.IndexOf(controlAlpha);
var betaIndex = panel.Controls.IndexOf(controlBeta);
panel.Controls.SetChildIndex(controlAlpha, betaIndex);
panel.Controls.SetChildIndex(controlBeta, alphaIndex);
Примечание: я не обработал здесь последовательность должным образом - вам нужно сначала установить предыдущий элемент управления, иначе, когда второй будет перемещен впереди него, результирующий индекс тоже будет высоко. Но это упражнение для читателя.
Для более сложного случая, когда элементы управления находятся на разных FlowLayoutPanel
, код проще (последовательность не имеет большого значения) и сложнее (каждый элемент управления необходимо удалить с одной панели и добавить к другой).
Control bobParent = bob.Parent;
Control aliceParent = alice.Parent;
int bobIndex = bobParent.Controls.GetChildIndex(bob);
int aliceIndex = aliceParent.Controls.GetChildIndex(alice);
bobParent.Controls.Add(alice);
aliceParent.Controls.Add(bob);
bobParent.Controls.SetChildIndex(alice, bobIndex);
aliceParent.Controls.SetChildIndex(bob, aliceIndex);
Наверное, не самый короткий, но все должно работать ...
Я не думаю, что вы можете сделать именно то, что пытаетесь достичь. Но ваши требования кажутся мне странными: вы можете идеально визуально поменять местами два элемента управления в форме без каких-либо ограничений на их соответствующий индекс в родительской ControlCollection
.
Самое близкое, что вы могли бы сделать, это сохранить ваши элементы управления в Panel
:
PanelA
и PanelB
. PanelA
будет содержать ] Алиса
и PanelB
будет содержать Боб
. Боб
в PanelA
и Алиса
в PanelB
. Я бы сказал, что вам нужно удалить все элементы управления из ControlCollection
(а), с которыми вы работаете, и сохранить их в структурах данных, которые соблюдают порядок элементов (может быть, SortedList
?).
В первом случае вам нужно поменять местами Алису и Боба в SortedList
, а затем заново добавить все элементы управления из SortedList
обратно в ControlCollection
.
Второй случай будет аналогичен первому, за исключением того, что у вас будет 2 SortedList
s, и вы бы поменяли местами Алису и Боба между ними.