C# скрываются, изменяют размер курсора

Нет необходимости в специфичном для angular2 решении. Вы можете использовать window.location.hostname для получения текущего имени хоста.

Обратите внимание, однако, что если вы не хотите использовать глобальные переменные, такие как объект window напрямую, вы можете предоставить свой собственный объект Window, который затем можно внедрить.

Подробнее см. Этот полный рабочий угловой образец Штакблица .

Обновленный ответ для Angular 6+

Как уже говорили другие, оригинальный ответ больше не работает. Для Angular 6+ вам необходимо предоставить Injection Token , чтобы window -объект можно было разрешить и в AOT -стройке.

Я рекомендую создать массив WINDOW_PROVIDERS в отдельном файле, например так:

import { InjectionToken, FactoryProvider } from '@angular/core';

export const WINDOW = new InjectionToken('window');

const windowProvider: FactoryProvider = {
  provide: WINDOW,
  useFactory: () => window
};

export const WINDOW_PROVIDERS = [
    windowProvider
]

Константу WINDOW_PROVIDERS можно добавить в массив providers в AppModule следующим образом:

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule
  ],
  providers: [
    WINDOW_PROVIDERS, // <- add WINDOW_PROVIDERS here
    SampleService,
  ],
  bootstrap: [AppComponent]
})
export class AppModule { }

В SampleService объект window может быть введен с помощью определенного маркера , например:

import { Injectable, Inject } from '@angular/core';
import { WINDOW } from '../window.provider';

@Injectable()
export class SampleService {

    constructor(@Inject(WINDOW) private window: Window) {
    }

    getHostname() : string {
        return this.window.location.hostname;
    }
}

Исходный ответ для углового 2

Поэтому вам нужно установить провайдера для Window -объекта при загрузке вашего приложения.

import {provide} from 'angular2/core';
bootstrap(..., [provide(Window, {useValue: window})]);

После этого вы можете использовать объект окна и получить доступ к имени хоста следующим образом:

constructor(private window: Window) {
   var hostname = this.window.location.hostname;
}

5
задан Ozzy 30 May 2009 в 18:33
поделиться

4 ответа

Я нашел способ использовать WndProc благодаря ссылке, которую прислал мне Лассе. Спасибо за ответ, Джон, но это было не совсем то, что я хотел. Для тех, кто хочет знать, как я это сделал, я использовал следующее:

    protected override void WndProc(ref Message m)
    {
        const int WM_NCHITTEST = 0x0084;

        switch (m.Msg)
        {
            case WM_NCHITTEST:
                return;
        }

        base.WndProc(ref m);
    }

Я не тестировал его тщательно, поэтому не знаю, есть ли какие-либо побочные эффекты, но на данный момент он отлично работает для меня :).

7
ответ дан 18 December 2019 в 12:01
поделиться

Почему бы вместо этого не установить свойство FormBorderStyle соответствующим образом? Тогда вам не нужно использовать WndProc .

Вот пример кода для демонстрации - нажмите кнопку, чтобы выбрать, можно ли изменять размер формы:

using System;
using System.Windows.Forms;
using System.Drawing;

class Test
{   
    [STAThread]
    static void Main(string[] args)
    {
        Button button = new Button 
        {
            Text = "Toggle border",
            AutoSize = true,
            Location = new Point(20, 20)
        };
        Form form = new Form
        {
            Size = new Size (200, 200),
            Controls = { button },
            FormBorderStyle = FormBorderStyle.Fixed3D
        };
        button.Click += ToggleBorder;
        Application.Run(form);
    }

    static void ToggleBorder(object sender, EventArgs e)
    {
        Form form = ((Control)sender).FindForm();
        form.FormBorderStyle = form.FormBorderStyle == FormBorderStyle.Fixed3D
            ? FormBorderStyle.Sizable : FormBorderStyle.Fixed3D;
    }
}
8
ответ дан 18 December 2019 в 12:01
поделиться

Для этого достаточно установить FormBorderStyle. Почему вы используете для этого WndProc?

0
ответ дан 18 December 2019 в 12:01
поделиться

@Ozzy / Lasse Работал на меня!

Возникла та же проблема:

Стандартные стили границ не выглядят так, как я хочу, в отличие от пользовательских CreateParams. Я указал те же значения для Size, MinimumSize и MaximumSize, чтобы отключить изменение размера. Курсоры изменения размера все еще устанавливались, благодаря Оззи и Лассе, теперь это обрабатывается путем фильтрации WM_NCHITTEST ...

Спасибо

0
ответ дан 18 December 2019 в 12:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: