Я застрял при загрузке формулы из выбранной ячейки в текстовое поле («txtValue») из пользовательского элемента управления (формы Windows).
Я добавил триггеры, я обрабатываю формулу в строку S, все, что у меня есть сейчас, работает до тех пор, пока мне не нужно загрузить простую строковую переменную в текстовое поле «txtValue» из пользовательского элемента управления ctrlFormulas
Код: Выделить всё
//I call the code below using:
clsControls.update("Formulas", "txtValue", formattedFormula.ToString());
//
internal static void update(string formName, string controlKey, string S)
{
switch (formName)
{
case "Formulas":
// Access the user control and update the textbox
var userControl = Globals.ThisAddIn.CustomTaskPanes.Add(new ctrlFormulas(), formName);
//var tableLayout = userControl.Control.Controls["tableLayoutPanel1"] as TableLayoutPanel;
var textBox = FindTextBoxRecursive(userControl.Control, "txtValue");
if (textBox != null)
{
textBox.Text = S; // This updates the value of textBox.Text, but does not update the User Control
}
break;
}
}
private static TextBox FindTextBoxRecursive(Control parentControl, string targetName)
{
foreach (Control control in parentControl.Controls)
{
if (control.Name == targetName && control is TextBox textBox)
{
return textBox;
}
if (control.HasChildren)
{
var childResult = FindTextBoxRecursive(control, targetName);
if (childResult != null)
{
return childResult;
}
}
}
return null;
}
Код: Выделить всё
internal class clsControls
{
private static string WBCtrlName;
private static ctrlFormulas cFormulas;
private static Tools.CustomTaskPane tpFormulas;
public static Tools.CustomTaskPane ControlToggle(Tools.CustomTaskPane tpTEMP, string controllName)
{
//IF IT'S ALREADY INITIALIZED
if (tpTEMP != null)
{
//IF SHEET CHANGED, REINITIALIZE
if (WBCtrlName != Globals.ThisAddIn.Application.ActiveWorkbook.Name)
{
tpTEMP=ControlInit(controllName);
}
else
{
if (tpTEMP.Visible == true)
{
tpTEMP.Visible = false;
}
else
{
tpTEMP.Visible = true;
}
}
}
else
{
//IF NOT INITIALIZED, THEN INITIALZE
tpTEMP = ControlInit(controllName);
}
return tpTEMP;
}
public static Tools.CustomTaskPane ControlInit( string controllName)
{
Tools.CustomTaskPane ctrlTemp=null;
WBCtrlName = Globals.ThisAddIn.Application.ActiveWorkbook.Name;
switch (controllName)
{
case "Formulas":
ctrlFormulas cFormulas = new ctrlFormulas();
ctrlTemp = Globals.ThisAddIn.CustomTaskPanes.Add(cFormulas, controllName);
ctrlTemp.DockPosition = Office.MsoCTPDockPosition.msoCTPDockPositionLeft;
ctrlTemp.Width = 500;
ctrlTemp.Visible = true;
break;
}
return ctrlTemp;
}
Код: Выделить всё
public partial class RibbonMain
{
private void btnShowFormulas_Click(object sender, RibbonControlEventArgs e)
{
clsControls.toggleFormulas();
}
}
Подробнее здесь: https://stackoverflow.com/questions/784 ... rmula-to-u