TechieeGeek Ответов: 2

Как создать объект в языковом проекте VB для передачи в языковой проект C#


Мне нужно отправить около 10 значений полей из VB в проект C#. Из решения VB мне нужно передать значения, которые будут использоваться в решении C#. В каком решении мне нужно создать объект, если я должен создать один и тот же объект в обоих проектах.

Что я уже пробовал:

В настоящее время я передаю значения в виде параметров, разделенных запятыми, но я бы предпочел отправлять их как один объект, а не как несколько параметров.

VB project code is similar to this:
objCSharpClass.MethodName(t1.Text, t2.Text, .. . . , t10.Text)

C# project code is similar to this:
void MethodName(string t1, ..... string t10)
{
// logic here which checks using parameters passed for which WindowForm to open
}

I want to pass a single object instead of ten parameters.

2 Ответов

Рейтинг:
18

OriginalGriff

Нет, просто создайте класс в VB или C#, скомпилируйте проект и ссылайтесь на него в другом. Что касается .NET, то не имеет значения, где вы определяете класс, он может использовать его в обоих случаях.


Рейтинг:
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, так что, возможно, что-то еще, что он предоставляет, может быть полезно.