Как объединить ячейки и назначить границы объединённой ячейке

Автор Тема: Как объединить ячейки и назначить границы объединённой ячейке  (Прочитано 6182 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн XaraАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Удалось обойти этот момент.
Нарисовался попутный вопрос - а какой параметр отвечает за слияние и отрисовку границ ячейки?
Скажем, надо слиять 3 ячейки в одну (чтобы была одна ячейка [_________] вместо трех [__][__][__]) и чтобы у них была только нижняя граница, а других не было?
Вот кусок кода, но увы, не срабатывает (пытаюсь погасить левую, верхнюю и правую границы):
Код - C# [Выбрать]
  1. tb1.Rows[0].Borders.Top.IsVisible = false;
  2. tb1.Rows[0].Borders.Right.IsVisible = false;
  3. tb1.Rows[0].Borders.Left.IsVisible = false;
Может, оно вообще не так делается? :)

А с разбиением tb1.MergeCells не нашел ничего интересного :(

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Скажем, надо слиять 3 ячейки в одну (чтобы была одна ячейка [_________] вместо трех [__][__][__]) и чтобы у них была только нижняя граница, а других не было?
Надеюсь ты про AutoCAD? По поводу объединения ячеек здесь: https://adn-cis.org/forum/index.php?topic=9569.msg40973#msg40973
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Xara 24-01-2020, 10:27:13

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот пример с установлением видимости/невидимости границ ячеек:

Код - C# [Выбрать]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(MergeCellsTest.MyCommands))]
  10.  
  11. namespace MergeCellsTest
  12. {
  13.   public class MyCommands
  14.   {
  15.     [CommandMethod("MergeCellsTest")]
  16.     public void MergeCellsTestHandler()
  17.     {
  18.       Document doc = Application.DocumentManager.MdiActiveDocument;
  19.       if (doc == null) return;
  20.       Editor ed = doc.Editor;
  21.       Createtable();
  22.     }
  23.     public void Createtable()
  24.     {
  25.       Database db = HostApplicationServices.WorkingDatabase;
  26.  
  27.       using (Transaction tr = db.TransactionManager.StartTransaction())
  28.       {
  29.         BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
  30.         ObjectId msId = bt[BlockTableRecord.ModelSpace];
  31.  
  32.         BlockTableRecord btr = (BlockTableRecord)tr.GetObject(msId, OpenMode.ForWrite);
  33.  
  34.         Table tb = new Table();
  35.         tb.TableStyle = db.Tablestyle;
  36.         btr.AppendEntity(tb);
  37.  
  38.         // Число строк
  39.         int RowsNum = 5;
  40.         // Число столбцов
  41.         int ColumnsNum = 5;
  42.  
  43.         // Высота строки
  44.         double rowheight = 3;
  45.         // Ширина столбца
  46.         double columnwidth = 20;
  47.  
  48.         // Добавляем строки и колонки
  49.         tb.InsertRows(0, rowheight, RowsNum - 1);
  50.         tb.InsertColumns(0, columnwidth, ColumnsNum - 1);
  51.  
  52.         tb.SetRowHeight(rowheight);
  53.         tb.SetColumnWidth(columnwidth);
  54.  
  55.         Point3d eMax = db.Extmax;
  56.         Point3d eMin = db.Extmin;
  57.         double CenterY = (eMax.Y + eMin.Y) * 0.5;
  58.         tb.Position = new Point3d(10, 10, 0);
  59.        
  60.         // Объединяем ячейки
  61.         CellRange range = CellRange.Create(tb, 1, 1, 1, 3);
  62.         tb.MergeCells(range);
  63.         // Назначаем видимость границ объединённой ячейке
  64.         // верхняя граница невидима, а остальные видимы
  65.         range.Borders.Top.IsVisible = false;
  66.         range.Borders.Bottom.IsVisible = true;
  67.         range.Borders.Left.IsVisible = true;
  68.         range.Borders.Right.IsVisible = true;
  69.  
  70.         // заполняем по одной все ячейки
  71.         for (int i = 0; i < RowsNum; i++)
  72.         {
  73.           for (int j = 0; j < ColumnsNum; j++)
  74.           {
  75.             tb.Cells[i, j].TextHeight = 1;
  76.             tb.Cells[i, j].TextString = i.ToString() + "," + j.ToString();
  77.             tb.Cells[i, j].Alignment = CellAlignment.MiddleCenter;
  78.           }
  79.         }
  80.         tb.GenerateLayout();
  81.         tr.AddNewlyCreatedDBObject(tb, true);
  82.         tr.Commit();
  83.       }
  84.     }
  85.   }
  86. }

А вот результат:

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн XaraАвтор темы

  • ADN OPEN
  • Сообщений: 18
  • Карма: 0
Александр Ривилис, большое спасибо! :)