Надстройка C# для Excel VSTO в Visual Studio: загрузка формулы выбранной ячейки в пользовательский элемент управления (фC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Надстройка C# для Excel VSTO в Visual Studio: загрузка формулы выбранной ячейки в пользовательский элемент управления (ф

Сообщение Anonymous »

Я работаю над надстройкой VSTO для Excel, использую Visual Studio и C# и застрял на чем-то, что должно быть достаточно простым, но никакая онлайн-документация не дала мне рабочего ответа. p>
Я застрял при загрузке формулы из выбранной ячейки в текстовое поле («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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»