Я программирую свои пользовательские стили для своего дизассемблера. К сожалению, кажется, что он всегда переписывает стиль последним персонажам, а другие стили теряются. Вот мой код, который называет мой стиль:Почему стили перезаписываются, если я применяю больше стилей к тексту в отдельных методах?
if (Base)
{
ITypeBase Instr = new ITypeBase();
Instr = BaseTypeSplit(bits, Instr);
Disassemble._dis.updateOP(CheckOpcode(Instr.opcode) + " ");
Disassemble._dis.updateREG(CheckReg(Instr.rt));
Disassemble._dis.updateCOMMA(", ");
Disassemble._dis.updateIMM(CheckImm(Instr.imm));
Disassemble._dis.updateREGB("(" + CheckReg([email protected]) + ")");
}
Да, мой основной код вызывает SCINTILLA Box из другого класса. Я использую свой конструктор из другого класса (_dis = this;
) для его доступа.
А вот мои функции, которые делают стайлинг:
public Disassemble()
{
InitializeComponent();
_dis = this;
}
public static Disassemble _dis;
public void updateOP(string message)
{
int length = scintilla1.TextLength;
int length2 = message.Length;
int sum = length + length2;
scintilla1.Styles[1].Font = new Font("Arial", 25, FontStyle.Bold);
scintilla1.Styles[1].ForeColor = Color.FromArgb(255, 128, 0);
scintilla1.Text += message;
int n = length;
while (length < sum)
{
scintilla1.GetRange(n).SetStyle(1);
n = length + 1;
length += 1;
}
}
public void updateREG(string message)
{
int length = scintilla1.TextLength;
int length2 = message.Length;
int sum = length + length2;
scintilla1.Styles[2].Font = new Font("Arial", 25, FontStyle.Bold);
scintilla1.Styles[2].ForeColor = Color.FromArgb(128, 0, 0);
scintilla1.Text += message;
int n = length;
while (length < sum)
{
scintilla1.GetRange(n).SetStyle(2);
n = length + 1;
length += 1;
}
}
public void updateREGB(string message)
{
int length = scintilla1.TextLength;
int length2 = message.Length;
int sum = length + length2;
scintilla1.Styles[5].Font = new Font("Arial", 25, FontStyle.Bold);
scintilla1.Styles[5].ForeColor = Color.FromArgb(172, 172, 172);
scintilla1.Text += message;
int n = length;
while (length < sum)
{
scintilla1.GetRange(n).SetStyle(5);
n = length + 1;
length += 1;
}
}
public void updateCOMMA(string message)
{
int length = scintilla1.TextLength;
int length2 = message.Length;
int sum = length + length2;
scintilla1.Styles[3].Font = new Font("Arial", 25, FontStyle.Bold);
scintilla1.Styles[3].ForeColor = Color.FromArgb(0, 0, 0);
scintilla1.Text += message;
int n = length;
while (length < sum)
{
scintilla1.GetRange(n).SetStyle(3);
n = length + 1;
length += 1;
}
}
public void updateIMM(string message)
{
int length = scintilla1.TextLength;
int length2 = message.Length;
int sum = length + length2;
scintilla1.Styles[4].Font = new Font("Arial", 25, FontStyle.Bold);
scintilla1.Styles[4].ForeColor = Color.FromArgb(0, 0, 255);
scintilla1.Text += message;
int n = length;
while (length < sum)
{
scintilla1.GetRange(n).SetStyle(4);
n = length + 1;
length += 1;
}
}
И это то, что я получаю, всегда:
Как вы видите, это только стили последних символов и другие стилизованные персонажи теряют свой стиль и перезаписываются.
Я пробовал некоторые (ужасные) способы, но они также не привели к тому, что я хотел. Есть ли у кого-то идеи, что может быть причиной этого? Для получения дополнительной информации я использую Visual Studio 2012, .NET 4.5