Рейтинг:
12
BillWoodruff
обновление... предполагая,:
0. решение VB имеет набор ссылок на скомпилированный Проект C# (. dll или .exe)
1. а VB.NET решение/проект под названием 'VBApp_2019
a. 'VBApp_2019 устанавливается как запуск и имеет форму с именем 'Form1, форма запуска
b. 'VBApp_2019 имеет 1o текстовых полей, которые пользователь может редактировать: 'TextBox1 ... 10
гр. 'VBApp_2019 есть кнопка, 'кнопка button1
2. в рамках решения VB: Проект C# с именем 'WFrmApp_2019, с формой 'CSharpForm1, с 10 текстовыми полями, которые пользователь может редактировать: 'TextBox1 ... 10
Решение VB
Public Class Form1
Private Dim wfform
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
wfform = New WFrmApp_2019.CSharpForm1 'use the reference to the C Project
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim txtdata As Dictionary(Of String,String) = new Dictionary(Of string, string)
For Each c As Control In Controls
If TypeOf c is TextBox
txtdata.Add(c.Name, c.Text)
End If
Next
wfform.ReceiveData(txtdata)
wfform.Show
End Sub
End Class
Проект C# :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace WFrmApp_2019
{
public partial class CSharpForm1 : Form
{
public CSharpForm1()
{
InitializeComponent();
}
public void ReceiveData(Dictionary<string, string> data)
{
// find the controls whose names match the VB Controls
foreach (var kvp in data)
{
Control c = this.Controls.Find(kvp.Key,false)[0];
c.Text = kvp.Value;
}
this.BringToFront();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
оригинальный пост ...
Ты о чем это говоришь
погрузка набор статических значений, определенных в проекте VB в проекте C# времени разработки ... или вы говорите о
обменивающийся данные между запущенным приложением VB и запущенным приложением C#?
Между этими двумя задачами существуют большие различия.
Когда вы говорите: "отправьте около 10 значений полей", это наводит меня на мысль, что вы говорите о
бегущий программа.
Так,
уточнить- будьте как можно конкретнее.
TechieeGeek
Я говорю об обмене данными между ними. Вместо того чтобы передавать десять параметров методу, я думаю о передаче одного объекта; но я сомневаюсь в том месте, где мне нужно создать класс для объекта. Нужно ли создавать один и тот же класс в обоих решениях?
BillWoodruff
Пока вы не опишете детали, о которых я вас спрашиваю, я не могу сказать больше.
TechieeGeek
Код проекта VB похож на этот:
objCSharpClass.Имя_метода(Т1.Текст, Т2.Текст, .. . . , Т10.Текст)
Код проекта C# похож на этот:
пустота Имя_метода(строка Т1, ..... строки Т10)
{
// логика здесь
}
Я хочу передать один объект вместо десяти параметров.
BillWoodruff
1. приложение vb работает ?
2. приложение c# запущено ?
3. если оба работают: оба работают на одной машине ? или ... ?
4. если они не работают, является ли это проблемой перевода VB на C# ?
Пока не станет ясно, что ты хочешь сделать, я не могу сказать больше.
TechieeGeek
Оконное приложение состоит из нескольких проектов, построенных с использованием C#/VB. Теперь из проекта VB мне нужно открыть форму C#, и я передаю значения в качестве параметров; и я пытаюсь передать эти параметры как единый объект.
Они находятся на одной и той же машине.
BillWoodruff
Какой проект запускается: я предполагаю, что VB, и в приложении VB вы хотите создать n экземпляров WinForm и передать ему некоторые данные для отображения на WinForm ?
Или ... ?
TechieeGeek
Вы подошли очень близко. Из запущенного проекта VB я вызываю метод, передающий ему параметры в решении C#, и внутри него, используя переданные данные, создаю экземпляр требуемой формы окна для отображения. Теперь я заинтересован в передаче данных в виде одного объекта, а не нескольких параметров. Надеюсь, теперь вам все ясно.
Спасибо.
BillWoodruff
Да... наконец... все гораздо яснее. Пожалуйста, отредактируйте свой оригинальный пост и покажите код, который вы используете сейчас. Тогда я отвечу ... легко делать то, что ты хочешь ... когда я вижу, что вы делаете усилие. И подумайте о том, нужна ли вам WinForm для отправки данных обратно в приложение VB.
Вы также можете описать, почему вы используете как C#, так и VB.
твое здоровье, Билл
TechieeGeek
Обновлено первоначальное сообщение. Нет, мне не нужно отправлять данные обратно в приложение VB. На самом деле вся новая разработка выполняется с использованием C#.
BillWoodruff
Хорошо, я собираюсь отредактировать свой ответ, чтобы показать один из способов, которым вы могли бы это сделать.
TechieeGeek
ух ты!! использование словаря сделало все намного проще. Спасибо Вам за такой удивительный ответ
BillWoodruff
Я рад, что вы нашли это полезным. Имейте в виду, что существует множество способов приблизиться к этому, включая наличие статического/общего класса в VB или C# для хранения данных, к которым могут получить доступ оба приложения. Я не очень хорошо знаю VB, так что, возможно, что-то еще, что он предоставляет, может быть полезно.