RichTextBox с его Выделением и Картинками
Столкнулся с такой проблемой, что ломаю голову уже второй день. Суть такова, что в RichTextBox хочу положить несколько картинок, а так же текст(разного размера), но при выполнении кода: 1)Остается одна картинка(самая последняя), да и вставляется она в конец. 2)Текст меняется не в выделенном мною секторе,а в секторе, который был записан до него.
private void WriteTextToRichBox(string XmlFilePath)
{
richTextBox1.Clear(); //Очистка ричбокса.
richTextBox1.Refresh(); //Rehash
xml.Load(XmlFilePath);
XmlElement element = xml.DocumentElement;
foreach (XmlNode xnode in element)
{
if (xnode.Attributes.Count > 0)
{
//Объявление деф. переменных
float TitleSize = 16.0f, textsize = 12.0f;
string TextStyle = "Times New Roman";
string referencenumber = "";
XmlNode attr;
if (XmlFilePath.Contains("techlist"))
{
attr = xnode.Attributes.GetNamedItem("referencenumber");
if (attr != null)
referencenumber = attr.Value;
}
foreach (XmlNode childnode in xnode.ChildNodes)
{
if (childnode.Name == "style")
{
if (childnode.InnerText.Length > 0)
TextStyle = childnode.InnerText; //Получение Стиля.
}
else if (childnode.Name == "titlesize")
{
if (childnode.InnerText.Length > 0)
TitleSize = (float)Convert.ToDouble(childnode.InnerText); //Размер Титульного названия.
}
else if (childnode.Name == "wordssize")
{
if (childnode.InnerText.Length > 0)
{
textsize = (float)Convert.ToDouble(childnode.InnerText); //Размер обычного текста.
}
}
else if (childnode.Name == "img")
{
string ImagePath = childnode.InnerText;
if (ImagePath.Length > 0)
{
richTextBox1.Text += "\n"; //Картинка на следующей строке.
richTextBox1.SelectionStart = richTextBox1.TextLength; //Установка курсора в конец.
InsertImage(ImagePath);
richTextBox1.Focus(); //Установка курсора в конец.
}
}
else if (childnode.Name == "title")
{
referencenumber += $" {childnode.InnerText}\n";
int previousnumber = richTextBox1.TextLength; //Начало для выделения.
richTextBox1.Text += referencenumber; //Вставка текста.
if (TitleSize != 0.0f)
{
richTextBox1.Select(previousnumber, referencenumber.Length);
if (richTextBox1.SelectionLength > 0) //Точно ли я выделил?
{
richTextBox1.SelectionFont = new Font(TextStyle, TitleSize); //Замена шрифта(Стиль и размер).
richTextBox1.Text += '\n';
richTextBox1.Focus(); //Установка курсора в конец.
}
}
}
else if (childnode.Name.Contains("text"))
{
string text = childnode.InnerText;
if (text.Length > 0)
{
int previousnumber = richTextBox1.TextLength; //Начало для выделения.
richTextBox1.Text += text; //Вставка текста.
richTextBox1.Select(previousnumber, richTextBox1.TextLength); //Выборка нужной части.
if (richTextBox1.SelectionLength > 0) //Точно ли я выделил?
{
richTextBox1.SelectionFont = new Font(TextStyle, textsize); //Замена шрифта(Стиль и размер).
richTextBox1.Text += '\n';
richTextBox1.Focus(); //Установка курсора в конец.
}
}
}
}
}
}
richTextBox1.Visible = RichTextBox1Closer.Visible = true;
}
private void InsertImage(string ImagePath)
{
richTextBox1.Focus();
//CHecking image file for next insertion.
Image Img = Image.FromFile(ImagePath);
Bitmap myBitmap;
if (Img.Width > 512 || Img.Height > 512)
{
myBitmap = new Bitmap(new Bitmap(ImagePath), new Size(512, 512));
}
else
{
myBitmap = new Bitmap(ImagePath);
}
Clipboard.SetImage(myBitmap);
// Copy the bitmap to the clipboard.
Clipboard.SetDataObject(myBitmap);
// Get the format for the object type.
DataFormats.Format myFormat = DataFormats.GetFormat(DataFormats.Bitmap);
// After verifying that the data can be pasted, paste
if (richTextBox1.CanPaste(myFormat))
{
richTextBox1.SelectionStart = richTextBox1.TextLength;
richTextBox1.Paste(myFormat);
}
else
{
MessageBox.Show("The data format that you attempted site" + " is not supportedby this control.");
}
}
Первый xml:
<?xml version="1.0" encoding="utf-8"?>
<imagesdata>
<imagesdata normaltextsize="12">
<style>Times New Roman</style>
<wordssize>22</wordssize>
<text>В настоящее время используются три основные схемы циркуляции жидкости или промывки скважин: прямая, обратная и комбинированная [1]. При этом может происходить полная, неполная и местная циркуляция жидкости.</text>
<text2>Полная циркуляция сопровождается движением промывочной жидкости по замкнутому кругу: насос – бурильные трубы – ствол скважины – циркуляционные желоба и отстойники – насос(рис. 4.1).</text2>
<img>C:\Users\WorkingPc\Downloads\asdffasdfasd.jpg</img>
</imagesdata>
<imagesdata normaltextsize="12">
<style>Times New Roman</style>
<wordssize>6</wordssize>
<text>В настоящее время используются три основные схемы циркуляции жидкости или промывки скважин: прямая, обратная и комбинированная [1]. При этом может происходить полная, неполная и местная циркуляция жидкости.</text>
<text2>Полная циркуляция сопровождается движением промывочной жидкости по замкнутому кругу: насос – бурильные трубы – ствол скважины – циркуляционные желоба и отстойники – насос(рис. 4.1).</text2>
<img>D:\Скрины\testsp.jpg</img>
</imagesdata>
</imagesdata>
Второй xml:
<?xml version="1.0" encoding="utf-8"?>
<techlist>
<techlist referencenumber="4.2.1">
<style>Times New Roman</style>
<titlesize>16</titlesize>
<title>Краткая характеристика промывочных жидкостей.</title>
<wordssize>12</wordssize>
<text>Как показал опыт бурения геолого-разведочных скважин ранее широко применяемые промывочные жидкости такие, как вода, глинистые растворы теряют свою эффективность при проведении глубоких скважин. При этом возрастают гидродинамические нагрузки на стенку скважины, возрастает вероятность самозаклинивания керна, повышается вибрация колонны бурильных труб. Эти причины, а также небольшие зазоры между буровым снарядом и стенкой скважины (до 3 мм) потребовали разработки более эффективных промывочных жидкостей. Промывочные жидкости должны обладать хорошими смазочно-охлаждающими и транспортирующими свойствами, иметь небольшие гидравлические потери, снижать вибрацию буровой колонны. Они должны хорошо очищать забой от шлама, обладать низкой фильтрацией в породу и крепить стенку скважины. К таким промывочным жидкостям относятся гуматносиликатные, полимерные, полимеркалиевые, аэрированные и др. Помимо свойств промывочной жидкости на показатели бурения оказывают существенное влияние ее уровень в затрубном пространстве и способ его поддержания.</text>
<img>C:\Users\WorkingPc\Downloads\asdffasdfasd.jpg</img>
</techlist>
<techlist referencenumber="4.2.2">
<style>Times New Roman</style>
<titlesize>16</titlesize>
<title>Технические средства для приготовления промывочных жидкостей.</title>
<wordssize>12</wordssize>
<text>Для приготовления промывочных жидкостей необходимо знать исходную информацию: технологические параметры; расход жидкости; применяемые материалы (глины, химические реагенты, добавки). Промывочная жидкость может быть изготовлена двумя способами: механическим; физико-механическим [5]. Для реализа- 122 ции механического способа применяются лопастные и пропеллерные мешалки, гидравлические перемешиватели, активаторы, фрезерно-струйные мельницы, гидроэжекторные смесители, дозаторы и другое оборудование. Механические глиномешалки в процессе приготовления и химобработки промывочных жидкостей выполняют функции по перемешиванию и диспергированию комовых глин и бентонитовых порошков. Глиноизмельчители (рис. 4.4) используются при приготовлении промывочных жидкостей из местных комковых глин, в частности в зимнее время, когда требуется дробление смерзшихся кусков. Измельчение осуществляется ударным механизмом из четырех лопастей 2, а их очистка от глины специальным устройством 4. К боковым стенкам рабочей части корпуса 1 глиноизмельчителя шарнирно прикреплена зубчатая щека 5, в которой ударными лопастями 2 раздавливаются крупные куски глины. Степень измельчения можно регулировать заменой щек. Рациональным считается размер кусков от 70 до 110 мм (меньший размер предпочтителен для фрезерно-струйной мельницы).</text>
<img>C:\Users\WorkingPc\Downloads\asdffasdfasd.jpg</img>
<text>Для повышения износостойкости рабочих частей зубчатой щеки и ударной лопасти армируются пластинками из твердого сплава. Производительность измельчителя составляет 10–15 т/ч. Размер загружаемых кусков глины не должен превышать 500 мм. 3 4 5 6 2 1 Фрезерно-струйные мельницы типа ФСМ (рис. 4.5) [5] являются разновидностью механических мешалок, которые используются для приготовления промывочных жидкостей. Они используются для выполнения следующих операций: приготовление промывочной жидкости на базе порошковых материалов (глина, известь и т.д.) и химических реагентов; обработка растворов для повышения их коллоидальности; утяжеление растворов. В настоящее время выпускаются мельницы типа ФСМ-3, ФСМ-7, ФСМ-13 мощностью до 35 кВт, производительностью до 20 т/ч комковой глины и 40 т/ч глинопорошка. К достоинствам фрезерно-струйных мельниц можно отнести высокую (в 4–5 раз больше глиномешалок) производительность, отсутствие шума и вибрации, небольшие габариты.</text>
<img>C:\Users\WorkingPc\Downloads\asdffasdfasd.jpg</img>
<text>Насос-мешалка (рис. 4.6) [5] необходима для приготовления, обработки и перемешивания раствора, отделения твердых частиц крупнее 3 мм и подачи раствора на очистку в гидроциклонный блок. С помощью насоса-мешалки можно приготовить глинистый раствор из глинопорошков, водных растворов полимеров, реагентов 8 1 2 3 4 5 6 7 9 10 11 из порошковых и гидрогелевых материалов. Производительность установки при приготовлении глинистого раствора составляет от 2 до 3 т/ч. Базовым устройством насоса-мешалки является электронасос «Гном» 1, соединенный валом 2 с мешалкой 4.</text>
<img>C:\Users\WorkingPc\Downloads\asdffasdfasd.jpg</img>
<text>Принцип работы вращающейся мешалки заключаются в том, что поток раствора проходит через решетку, мелкие частицы, взвешенные в растворе, проходят через отверстия решетки и уносятся насосом, а крупные – задерживаются решеткой, смешиваются с потоком, скользящим вдоль нее, и повторно дробятся, пока не проникнут через решетку. Установка насоса-мешалки способствует постоянному поддержанию технологических свойств раствора в требуемых пределах. Для активации промывочных жидкостей нашли применение струйные дезинтеграторы, эмульгаторы, гидродинамические диспергаторы, ультразвуковые эмульсионные и другие установки. </text>
</techlist>
</techlist>
Буду рад помощи в поиске решения.