Как Вы предотвращаете диалоговое окно печати при использовании метода Excel PrintOut

public class Rule : MonoBehaviour{}
Rule rule2 = new Rule();

Вы не можете использовать ключевое слово new для создания нового экземпляра, если вы наследуете его из MonoBehaviour.

Вы должны получить исключение, говорит :

Вы пытаетесь создать MonoBehaviour, используя ключевое слово 'new'. Это запрещено. MonoBehaviours можно добавлять только с помощью AddComponent (). Кроме того, ваш скрипт может наследовать от ScriptableObject или вообще никакого базового класса

. Ваш код работал бы, если у вас public class Rule {}, но у вас есть public class Rule : MonoBehaviour {}.

Создание нового экземпляра класса, полученного из MonoBehaviour:

Пример класса:

public class Rule : MonoBehaviour
{
    public Rule(int i)
    {

    }
}

Если вы наследуете MonoBehaviour, вы должны либо используйте GameObject.AddComponent или Instantiate для создания нового экземпляра.

Rule rule2 = null;
void Start()
{
  rule2 = gameObject.AddComponent<Rule>();
}

ИЛИ

public Rule rulePrefab;
Rule rule2;
void Start()
{
    rule2 = Instantiate(rulePrefab) as Rule;
}

Если скрипт Rule уже существуют и прикреплены к GameObject, вам не нужно создавать / добавлять / создавать новые экземпляры этого сценария. Просто используйте функцию GetComponent, чтобы получить экземпляр скрипта из GameObject, к которому он присоединен.

Rule rule2;
void Start()
{
    rule2 = GameObject.Find("NameObjectScriptIsAttachedTo").GetComponent<Rule>();
}

Вы заметите, что вы не можете использовать параметр в конструкторе, когда вы выводите свой скрипт из MonoBehaviour .



Создание нового экземпляра класса, который НЕ выводится из MonoBehaviour:

Пример класса: (Обратите внимание, что он не является результатом " MonoBehaviour "

public class Rule
{
    public Rule(int i)
    {

    }
}

Если вы не наследуете от MonoBehaviour, вы должны использовать ключевое слово new для создания нового экземпляра. Теперь вы можете использовать параметр в конструкторе, если вы хотите.

Rule rule2 = null;

void Start()
{
    rule2 = new Rule(3);
}

EDIT:

В последней версии Unity создается новый экземпляр скрипта, который наследует от MonoBehaviour с помощью new может не дать вам ошибку и не может быть null слишком , но все функции обратного вызова не будут выполняться . К ним относятся функции Awake, Start, Update и другие. , вы все равно должны сделать это правильно, как указано в начале этого ответа.

6
задан pnuts 16 July 2014 в 02:56
поделиться

2 ответа

Когда Вы говорите, что Диалоговое окно "Печати", я предполагаю, что Вы имеете в виду "Теперь печатающий xxx на" диалоговом окне, а не стандарт печатают диалоговое окно (избранный принтер, количество копий, и т.д.). Взятие Вашего примера выше и испытание его, который является поведением, которое я видел - "Теперь печатающий...", были отображены кратко и затем автозакрыты.

То, чем Вы пытаетесь управлять, не может быть связано с Excel, но вместо этого быть поведением уровня Windows. Если бы это управляемо, необходимо было бы a) было бы отключить его, b) было бы выполнить печать, c) было бы повторно включить. Если Ваш код перестал работать, существует риск, который это не повторно включено для других приложений.

Править: Попробуйте это решение: Как Вы предотвращаете диалоговое окно печати при использовании метода Excel PrintOut. Это, кажется, описывает точно, что Вы после.

1
ответ дан 17 December 2019 в 07:10
поделиться

Вызовы API в статье, связанной Kevin Haines, скрывают диалоговое окно Печати как так:

  1. Получите дескриптор диалогового окна Printing.
  2. Отправьте сообщение в окно, чтобы сказать этому не перерисовывать
  3. Делайте недействительным окно, которое вызывает перерисовку, которой никогда не происходит
  4. Скажите Windows перекрашивать окно, которое заставляет его исчезать.

Это упрощено мягко говоря.

Вызовы API безопасны, но Вы, вероятно, захотите удостовериться, что экранное обновление для диалогового окна Печати имеет значение true, если Ваше приложение перестало работать.

1
ответ дан 17 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

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