m.r.m.40 Ответов: 3

Физический адрес формы или элемента управления пользователя


Привет,

Я делаю программу с несколькими формами и usercontorls, но здесь у меня есть проблема,

Как я могу получить физический адрес формы, в которой я работаю прямо сейчас?

Дополнение 1:
Я имею в виду, есть ли свойство, которое динамически дает мне физический адрес формы или usercontrol, чтобы, когда я его использую, оно давало мне адрес, написанный в поле "полный путь" внутри меню свойств, и я мог бы использовать его как:

Dim myaddress as string = me.FullPath


Дополнение 2:
В обозревателе решений, когда вы выбираете файл, такой как form или usercontrol, или даже файл изображения или foler, после того как вы щелкнете по нему правой кнопкой мыши и выберете properties, в меню properties вы увидите строку, которая включает полный путь к этому файлу (Full Path), теперь я ищу способ динамического доступа к этому свойству внутри программы, например, запись
return me.FullPath
и он возвращает полный путь к файлу.

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

До сих пор я читаю MSDN и пытаюсь найти свойство, которое дает мне физический адрес usercontrol или формы.

0x01AA

Нет, физического адреса нет. Что ты будешь делать? Вам нужно что-то вроде "MyForm/MyPanel/MyUserControl", где "My..." - это имена элементов управления?

m.r.m.40

Нет, мне нужно что-то вроде ... C:\application\Accounting\Form1".

0x01AA

Я не понимаю :)

Richard MacCutchan

Формы не имеют физических адресов, они являются динамическими объектами, созданными во время выполнения из различных частей логики программы.

m.r.m.40

Я обновил вопрос, прочтите, пожалуйста, дополнение два.

m.r.m.40

Я обновил вопрос, дополнение 2 опубликовано в ответ на вас.

Richard MacCutchan

Формы не имеют физических адресов.

То, что вы видите в обозревателе решений, - это путь к исходному файлу в вашем проекте. Как только ваше приложение скомпилировано и связано в исполняемую программу, эти файлы больше не используются. При запуске приложения форма создается динамически в адресном пространстве приложения, а не в папке на диске.

m.r.m.40

Я понял,
Спасибо,

Так что теперь, когда я только что столкнулся с худшей проблемой, я загружу свой следующий вопрос, если не смогу решить эту проблему.

Спасибо,

F-ES Sitecore

Подсказка: если вам нужно расположение файлов исходного кода в вашем решении, то вы делаете что-то не так.

3 Ответов

Рейтинг:
2

Saurabh Gupta1

Воспользуйся

Server.MapPath
или
Path.GetFullPath


Рейтинг:
1

0x01AA

Не уверен, соответствует ли это вашему запросу, а также является ли это хорошей идеей для производства.
В любом случае, может быть, вы попробуете это сделать и получите какие-то идеи.

Использовать Системы.Во время выполнения.Компиляторные сервисы для этого:

using System.Runtime.CompilerServices;

namespace LogTests
{
    public static class LogTest
    {
        public static string Log(string infoText,
                                [CallerFilePath] string file = "",
                                [CallerMemberName] string member = "",
                                [CallerLineNumber] int line = 0)
        {
            string test = string.Format("File= {0} Member= {1} Line= {2} InfoText= {3}", file, member, line, infoText);
            return (test);
        }
    }
}


MyControl должен сделать что-то вроде этого:
namespace MyControls
{
    public class MyControl
    {
        // ...
        private void PathTest()
        {
            string test = LogTest.Log("MyControl");
        }
        // ....
    }
}


Надеюсь, это поможет.


Рейтинг:
0

Ralf Meier

Если я правильно понял вопрос, то ответ таков: рефлексия.
С помощью приведенного ниже кода Вы можете найти в своем приложении необходимые объекты и получить их имя.

Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim a As Reflection.Assembly = Reflection.Assembly.GetExecutingAssembly()
        Dim t() As Type = a.GetTypes()

        For Each ty As Type In t
            If ty.BaseType.Name = "Form" Then
                MessageBox.Show(ty.Name)
            End If
        Next

    End Sub
End Class


Кроме того, с помощью отражения вы можете получить свойства определенного типа объекта - но не так, как вы думаете.
Чтобы завершить это, вы должны предоставить гораздо больше информации ... какова ваша конечная цель ?