Последние сообщения

Последние сообщения

Страницы: [1] 2 3 ... 10
1
Разное / Re: TreeView изменить знечение по кл. F2
« Последний ответ от Алексей (IdeaSoft) 31-03-2017, 02:06:04 »
Вот такая реализация.

Код - C# [Выбрать]
  1.     public class TreeItem : Grid {
  2.  
  3.         private TreeViewItem Root; // "Корень" редактируемого элемента (для проверки на совпадение)
  4.         private TextBlock ElemText; // Элемент текста
  5.         private TextBox ElemEdit;    // Редактор
  6.         private bool PresKeyEnterOrEsc; // Этот флаг нужен, чтобы не вызывать метод EndEdit второй раз
  7.        
  8.         ////Конструктор //////////////////////////////////////////////////////////////////////////////////
  9.         public TreeItem(string text) {
  10.             ElemText = new TextBlock() { Text = text };
  11.             Children.Add(ElemText);
  12.             this.LostKeyboardFocus += grid_LostKeyboardFocus;
  13.         }
  14.         //// Возвращает текст элемента ///////////////////////////////////////////////////////////////////
  15.         public string GetText() {
  16.             if (ElemText != null)
  17.                 return ElemText.Text;
  18.             else
  19.                 return "";
  20.         }
  21.         //////проверка, является ли элементов в режиме редактирования /////////////////////////////////////
  22.         public bool isEditing() {
  23.             if (this.ElemEdit != null)
  24.                 return ElemEdit.Visibility  == Visibility.Visible;
  25.             else
  26.                 return false;
  27.         }
  28.         ///// Возвращает текст в момент редактирования элемента /////////////////////////////////////////
  29.         public string GetEditText() {
  30.             if (this.ElemEdit != null)
  31.                 return ElemEdit.Text;
  32.             else
  33.                 return "";
  34.         }
  35.         //////Запуск режима редактора ///////////////////////////////////////////////////////////////////
  36.         public void BeginEdit(TreeViewItem _Root) {
  37.             PresKeyEnterOrEsc = false;
  38.             this.ElemText.Visibility = Visibility.Collapsed;
  39.             if (ElemEdit == null) {
  40.                 ElemEdit = new TextBox();  
  41.                 ElemEdit.KeyUp += TextBox_KeyUp;
  42.                 ElemEdit.Background = Brushes.LightYellow;  
  43.                 ElemEdit.LostFocus += TextBox_LostFocus;
  44.                 Children.Add(ElemEdit);
  45.             }
  46.             // корневой элемент для проверки на совпадающие имена элементов
  47.             Root = _Root;  
  48.             ElemEdit.Visibility = Visibility.Visible;
  49.             ElemEdit.Text = ElemText.Text;
  50.             ElemEdit.Focus();
  51.             ElemEdit.SelectAll();
  52.         }
  53.         ///// "Откат" изменения, если пользователь передумал, нажав кл. "ESC"
  54.         //// или если есть такой элемент среди дочерних для одного корневого элемента
  55.         public void RollBack() {
  56.             this.ElemText.Visibility = Visibility.Visible;
  57.             if (ElemEdit != null)
  58.                 ElemEdit.Visibility = Visibility.Collapsed;
  59.         }
  60.         ///// Подтверждение изменения текста элемента ////////////////////////////////////////////////////
  61.         public void Commit() {
  62.             ElemText.Visibility = Visibility.Visible;
  63.             if (ElemEdit != null) {
  64.                 ElemEdit.Visibility = Visibility.Collapsed;
  65.                 ElemText.Text = ElemEdit.Text;    
  66.             }
  67.         }
  68.         ////// Завершение работы режима редактирования //////////////////////////////////////////////////
  69.         private void EndEdit() {
  70.             if (PresKeyEnterOrEsc) return;
  71.             if (isEditing()) {
  72.                 bool CanEdit = true;
  73.                 if (Root != null) { // проверка на совпадение текстов среди дочерних элементов
  74.                     foreach (TreeViewItem itm in Root.Items)
  75.                         if ((itm.Header as TreeItem).GetText().Trim() == ElemEdit.Text.Trim()) {
  76.                             CanEdit = false;
  77.                             break;
  78.                         }
  79.                 }
  80.                 if (CanEdit) Commit();
  81.                 else RollBack();
  82.             }
  83.         }
  84.         ////// обработка события клавиатуры /////////////////////////////////////////////////////////////
  85.         private void TextBox_KeyUp(object sender, KeyEventArgs e) {
  86.             if (e.Key == Key.Enter) {// Принимаем ввод нового значения клавише "Enter"
  87.                 EndEdit();
  88.                 PresKeyEnterOrEsc = true;
  89.             }
  90.             if (e.Key == Key.Escape) { // Делаем "откат" по клавише "Esc"
  91.                 RollBack();
  92.                 PresKeyEnterOrEsc = true;
  93.             }
  94.         }
  95.         //////// обработчик события потери фокуса редактора текста //////////////////////////////////////
  96.         private void TextBox_LostFocus(object sender, RoutedEventArgs e)  {
  97.             EndEdit();
  98.         }
  99.         ////////// обработчик события потери фокуса grid //////////////////////////////////////////////////
  100.         private void grid_LostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
  101.             EndEdit();
  102.         }
  103.     }


И объект этого класса присваевается элементу дерева
Код - C# [Выбрать]
  1.             TreeViewItem itm = new TreeViewItem();
  2.             itm.Header = new TreeItem(s);
2
Разное / Re: TreeView изменить знечение по кл. F2
« Последний ответ от Алексей (IdeaSoft) 31-03-2017, 01:45:21 »
Спасибо за ответы я разобрался с фокусом.
За основу взял ваш пример, только сделал чуть по другому.
Создаю TextBox,  в TreeViewItem, не сразу, а
только когда это необходимо пользователю.
3
Разное / Delegate в C#
« Последний ответ от Алексей (IdeaSoft) 31-03-2017, 01:35:31 »
Подскажите.
Есть к примеру, класс и делегат.
Код - C# [Выбрать]
  1.     delegate void MyDelegate(int cnt);
  2.     class MyClass  {
  3.         public event MyDelegate ChangeCount;  
  4.         private int Count;
  5.         public void move() {
  6.             Count++;
  7.             if (ChangeCount != null)
  8.                 ChangeCount(Count);
  9.         }
  10.     }

Код - C# [Выбрать]
  1.     class TestApp {
  2.         // обработчик события
  3.         public static void onChangeCount(int cnt)  {
  4.            if (cnt > 4)
  5.                 Console.WriteLine(cnt + " - это более допустимого знечения.");
  6.         }
  7.         public static void Main()
  8.         {
  9.         }
  10.     }

Какая разница между двумя примерами рализации кода функции Main?

Пример 1:
Код - C# [Выбрать]
  1.             MyDelegate deleg = new MyDelegate(onChangeCount);
  2.             MyClass Obj = new MyClass();
  3.             Obj.ChangeCount += deleg;  
  4.             Obj.move();

Пример 2:
Код - C# [Выбрать]
  1.              MyClass Obj = new MyClass();
  2.              Obj.ChangeCount += onChangeCount;
  3.              Obj.move();

Ведь оба примера работают.

4
Если у вас есть действующая подписка на AA 2017, то в вашем личном кабинете ( http://www.autodesk.com/account ) нужно создать заявку на поддержку:



К этой заявке приложить dwg-файл, ссылку на видео, описать проблему (на английском) и ждать ответа от техподдержки.

5
Здесь код на C#: http://through-the-interface.typepad.com/through_the_interface/2007/12/launching-autoc.html

Александр Наумович, спасибо Вам за попытку, но увы, это работает где угодно, кроме Dynamo.

Даже простой запуск файлов в Dynamo вызывает у меня недоумевание, поскольку в самом Iron Python это работает (import subprocess -> subprocess.call("Путь")), а вот Dynamo - не хочет это выполнять. В общем задал вопрос по Dynamo на форуме dynamobim.

Жду ответа.
6
Пока подготовьте видео при помощи Autodesk Screencast (у меня в подписи указано как это сделать). В этом видео должно быть видно, как вы открываете чертеж, как удаляете несколько объектов, как сохраняете и закрываете его и затем пытаетесь открыть. Чтобы было видно, что зависает на 18%. Остальное обсудим завтра.
7
Александр Ривилис, не подскажете как это можно сделать?
8
Остаётся отправить файл в официальную техподдержку.
9
Александр Ривилис, совсем. оставлял примерно минут на 40, 0 изменений. 18%
10
3.когда открываю сначала акад и из него чертеж, то он тут же виснет.
Виснет совсем или если подождать минут пять-десять, то отвисает?
Страницы: [1] 2 3 ... 10