DeviceManager/DeviceRepairAndOptimization/Pages/page_RichEdit.cs
2024-05-28 22:36:38 +08:00

170 lines
5.8 KiB
C#

using DevExpress.XtraEditors;
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using System;
using System.Data;
using System.IO;
using System.Windows.Forms;
namespace DeviceRepairAndOptimization.Pages
{
public partial class page_RichEdit : FormBase
{
public page_RichEdit()
{
InitializeComponent();
LoadDocument();
richEditControl1.Options.HorizontalRuler.Visibility = RichEditRulerVisibility.Hidden;
richEditControl1.Options.VerticalRuler.Visibility = RichEditRulerVisibility.Hidden;
}
public page_RichEdit(DataRow Datas)
{
InitializeComponent();
ItemData = Datas;
LoadDocument();
richEditControl1.Options.HorizontalRuler.Visibility = RichEditRulerVisibility.Hidden;
richEditControl1.Options.VerticalRuler.Visibility = RichEditRulerVisibility.Hidden;
}
DataRow ItemData { get; set; }
WordTabelPoints Rangs { get; set; }
TableCell SelectCell { get; set; }
TableCell OtherExceptionCell { get; set; }
public void LoadDocument()
{
string path = @"E:\locals\设备维护管理软件\Documentation\WI-013-R37 DMU50 DMU60加工中心定期维护点检表.docx";
if (File.Exists(path))
richEditControl1.LoadDocument(path, DocumentFormat.Doc);
richEditControl1.ReadOnly = true;
Rangs = new WordTabelPoints();
int StartRowNumber = -1;
richEditControl1.Document.Tables.First.ForEachRow((TableRow row, int rowIndex) =>
{
string StartValue = richEditControl1.Document.GetText(row.Cells.First.Range)?.Trim();
if (Rangs.RowIndex > 0 && Rangs.RowCount == 0 && row.Cells.First.ColumnSpan > 1)
{
Rangs.RowCount = row.Previous.Index - StartRowNumber;
}
string EndValue = richEditControl1.Document.GetText(row.Cells.Last.Range)?.Trim();
if (EndValue == "十二月")
{
Rangs.CellIndex = row.Cells.Last.Index - 11;
Rangs.RowIndex = row.Next.Index;
StartRowNumber = rowIndex;
}
if (StartValue == "其它异常处理")
{
OtherExceptionCell = row.FirstCell.Next;
}
});
}
private void richEditControl1_MouseClick(object sender, MouseEventArgs e)
{
if (!richEditControl1.IsSelectionInTable())
return;
RichEditControl richEdit = sender as RichEditControl;
DocumentPosition start = richEdit.Document.Selection.Start;
Table selectedTable = GetSelectedTable(richEdit.Document, start);
if (selectedTable != null)
{
TableCell selectedCell = GetSelectedTableCell(selectedTable, start);
if (selectedCell != null)
{
int rowIndex = selectedCell.Row.Index;
int columnIndex = selectedCell.Index;
if (IsCoordinateInRange(Rangs, rowIndex, columnIndex))
{
SelectCell = richEditControl1.Document.Tables.First[rowIndex, columnIndex];
popupMenu1.ShowPopup(richEditControl1.PointToScreen(e.Location));
}
}
}
}
private Table GetSelectedTable(Document document, DocumentPosition position)
{
foreach (Table table in document.Tables)
{
if (table.Range.Contains(position))
{
return table;
}
}
return null;
}
private TableCell GetSelectedTableCell(Table table, DocumentPosition position)
{
TableCell tc = null;
table.ForEachCell((TableCell cell, int rowIndex, int cellIndex) =>
{
if (cell.Range.Contains(position))
{
tc = cell;
}
});
return tc;
}
private void btn_Ok_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (SelectCell != null)
{
richEditControl1.Document.Replace(SelectCell.ContentRange, "√");
}
}
private void btn_NA_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (SelectCell != null && OtherExceptionCell != null)
{
// Show the input box
string result = XtraInputBox.Show("其它异常处理:", "输入", "");
if (!string.IsNullOrEmpty(result))
{
string contentString = richEditControl1.Document.GetText(OtherExceptionCell.Range)?.Trim();
contentString += Environment.NewLine + result;
richEditControl1.Document.Replace(OtherExceptionCell.ContentRange, contentString);
richEditControl1.Document.Replace(SelectCell.ContentRange, "N/A");
}
}
}
private void btn_Triangle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (SelectCell != null)
{
richEditControl1.Document.Replace(SelectCell.ContentRange, "△");
}
}
private void btn_None_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
{
if (SelectCell != null)
{
richEditControl1.Document.Replace(SelectCell.ContentRange, "/");
}
}
}
}